diff --git a/src/db/CMakeLists.txt b/src/db/CMakeLists.txt index f9d0bae..b2fc2e5 100644 --- a/src/db/CMakeLists.txt +++ b/src/db/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.8) project(db CXX) file(GLOB_RECURSE sources - src/*.cpp src/*.h + src/*.cpp src/*.h ) # Add the src directory to the include path @@ -11,6 +11,12 @@ include_directories(src) add_executable(${PROJECT_NAME} ${sources}) +# Set the default log level based on the build type +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + message(STATUS "This is a debug build. Log level will be set to 'trace' for target '${PROJECT_NAME}'.") + target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE) +endif() + # Find dependencies # @@ -29,10 +35,6 @@ target_link_libraries(${PROJECT_NAME} PRIVATE libevent::core libevent::extra lib find_package(effolkronium_random CONFIG REQUIRED) target_link_libraries(${PROJECT_NAME} PRIVATE effolkronium_random) -# fmt -find_package(fmt CONFIG REQUIRED) -target_link_libraries(${PROJECT_NAME} PRIVATE fmt::fmt) - # # System-provided dependencies # diff --git a/src/db/src/Main.cpp b/src/db/src/Main.cpp index e08eaad..ac392cb 100644 --- a/src/db/src/Main.cpp +++ b/src/db/src/Main.cpp @@ -61,6 +61,7 @@ void emergency_sig(int sig) int main() { WriteVersion(); + log_init(); #ifdef __FreeBSD__ _malloc_options = "A"; @@ -114,6 +115,8 @@ int main() SPDLOG_DEBUG("WAITING_QUERY_COUNT {}", iCount); } + log_destroy(); + return 1; } @@ -151,13 +154,11 @@ int Start() return false; } - log_set_expiration_days(3); - - if (CConfig::instance().GetValue("LOG_KEEP_DAYS", &tmpValue)) + if (CConfig::instance().GetValue("LOG_LEVEL", &tmpValue)) { - tmpValue = std::clamp(tmpValue, 3, 30); - log_set_expiration_days(tmpValue); - SPDLOG_INFO("Setting log keeping days to {}", tmpValue); + SPDLOG_INFO("Setting log level to {}", tmpValue); + tmpValue = std::clamp(tmpValue, SPDLOG_LEVEL_TRACE, SPDLOG_LEVEL_OFF); + log_set_level(tmpValue); } thecore_init(heart_beat, emptybeat); diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index d38d96d..8951355 100644 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -3,13 +3,20 @@ cmake_minimum_required(VERSION 3.8) project(game CXX) file(GLOB_RECURSE sources - src/*.cpp src/*.h + src/*.cpp src/*.h ) # Add the src directory to the include path include_directories(src) + add_executable(${PROJECT_NAME} ${sources}) +# Set the default log level based on the build type +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + message(STATUS "This is a debug build. Log level will be set to 'trace' for target '${PROJECT_NAME}'.") + target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE) +endif() + # Find dependencies # @@ -43,10 +50,6 @@ endif (LZO_FOUND) find_package(effolkronium_random CONFIG REQUIRED) target_link_libraries(${PROJECT_NAME} effolkronium_random) -# fmt -find_package(fmt CONFIG REQUIRED) -target_link_libraries(${PROJECT_NAME} fmt::fmt) - # # System-provided dependencies # diff --git a/src/game/src/config.cpp b/src/game/src/config.cpp index 7da6204..0818d29 100644 --- a/src/game/src/config.cpp +++ b/src/game/src/config.cpp @@ -663,10 +663,6 @@ void config_init(const string& st_localeServiceName) } // END_SKILL_POWER_BY_LEVEL - // LOG_KEEP_DAYS_EXTEND - log_set_expiration_days(2); - // END_OF_LOG_KEEP_DAYS_EXTEND - while (fgets(buf, 256, fp)) { parse_token(buf, token_string, value_string); @@ -692,11 +688,11 @@ void config_init(const string& st_localeServiceName) continue; } - TOKEN("log_keep_days") + TOKEN("log_level") { int i = 0; str_to_number(i, value_string); - log_set_expiration_days(std::clamp(i, 1, 90)); + log_set_level(std::clamp(i, SPDLOG_LEVEL_TRACE, SPDLOG_LEVEL_OFF)); continue; } diff --git a/src/game/src/main.cpp b/src/game/src/main.cpp index fd79c68..7380068 100644 --- a/src/game/src/main.cpp +++ b/src/game/src/main.cpp @@ -332,6 +332,7 @@ int main(int argc, char **argv) ilInit(); // DevIL Initialize WriteVersion(); + log_init(); SECTREE_MANAGER sectree_manager; CHARACTER_MANAGER char_manager; @@ -486,6 +487,7 @@ int main(int argc, char **argv) trafficProfiler.Flush(); destroy(); + log_destroy(); #ifdef DEBUG_ALLOC DebugAllocator::StaticTearDown(); @@ -499,7 +501,6 @@ void usage() printf("Option list\n" "-p : bind port number (port must be over 1024)\n" "-l : sets log level\n" - "-v : log to stdout\n" "-r : do not load regen tables\n" "-t : traffic proflie on\n"); } @@ -508,15 +509,13 @@ int start(int argc, char **argv) { std::string st_localeServiceName; - bool bVerbose = false; - //_malloc_options = "A"; #if defined(__FreeBSD__) && defined(DEBUG_ALLOC) _malloc_message = WriteMallocMessage; #endif int ch; - while ((ch = getopt(argc, argv, "n:p:verl:tI:")) != -1) + while ((ch = getopt(argc, argv, "n:p:erl:tI:")) != -1) { char* ep = NULL; @@ -556,10 +555,6 @@ int start(int argc, char **argv) break; // END_OF_LOCALE_SERVICE - case 'v': // verbose - bVerbose = true; - break; - case 'r': g_bNoRegen = true; break; @@ -588,11 +583,6 @@ int start(int argc, char **argv) config_init(st_localeServiceName); // END_OF_LOCALE_SERVICE -#ifdef __WIN32__ - // In Windows dev mode, "verbose" option is [on] by default. - bVerbose = true; -#endif - bool is_thecore_initialized = thecore_init(25, heartbeat); if (!is_thecore_initialized) diff --git a/src/game/src/threeway_war.cpp b/src/game/src/threeway_war.cpp index 9cdabba..611d8d7 100644 --- a/src/game/src/threeway_war.cpp +++ b/src/game/src/threeway_war.cpp @@ -41,7 +41,7 @@ EVENTFUNC(regen_mob_event) int iMapIndex = info->dwMapIndex; - char filename[128]; + char filename[256]; std::string szFilename(GetSungziMapPath()); diff --git a/src/libthecore/CMakeLists.txt b/src/libthecore/CMakeLists.txt index 8a95011..490d549 100644 --- a/src/libthecore/CMakeLists.txt +++ b/src/libthecore/CMakeLists.txt @@ -14,7 +14,11 @@ include_directories("include") # Create shared library add_library(${PROJECT_NAME} STATIC ${SOURCES}) -# Find dependencies +# +# vcpkg dependencies +# + +# Boost find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} PRIVATE ${Boost_LIBRARIES}) diff --git a/src/libthecore/include/log.h b/src/libthecore/include/log.h index 16cb696..c1db6f4 100644 --- a/src/libthecore/include/log.h +++ b/src/libthecore/include/log.h @@ -1,12 +1,6 @@ #pragma once -extern int log_init(void); -extern void log_destroy(void); +extern int log_init(); +extern void log_destroy(); -// ·Î±× ·¹º§ ó¸® (·¹º§Àº bitvector·Î 󸮵ȴÙ) extern void log_set_level(unsigned int level); -extern void log_unset_level(unsigned int level); - -// ·Î±× ÆÄÀÏÀ» ¾ó¸¸Å­ º¸°üÇϴ°¡¿¡ ´ëÇÑ ÇÔ¼ö -extern void log_set_expiration_days(unsigned int days); -extern int log_get_expiration_days(void); diff --git a/src/libthecore/include/stdafx.h b/src/libthecore/include/stdafx.h index 3146ad9..37b5b80 100644 --- a/src/libthecore/include/stdafx.h +++ b/src/libthecore/include/stdafx.h @@ -28,7 +28,6 @@ #include -#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE #include #include diff --git a/src/libthecore/src/log.cpp b/src/libthecore/src/log.cpp index b9591f5..91cf882 100644 --- a/src/libthecore/src/log.cpp +++ b/src/libthecore/src/log.cpp @@ -1,39 +1,74 @@ #define __LIBTHECORE__ #include "stdafx.h" -#include "spdlog/sinks/stdout_color_sinks.h" +#include "spdlog/sinks/daily_file_sink.h" +#include "spdlog/sinks/stdout_sinks.h" -#define SYSLOG_FILENAME "syslog.txt" -#define SYSERR_FILENAME "syserr.txt" - -unsigned int log_keep_days = 3; - - -void log_set_level(unsigned int bit) +int log_init() { -} -void log_unset_level(unsigned int bit) -{ -} + // Replace the default logger with a placeholder in order to avoid a name clash + spdlog::set_default_logger(spdlog::stderr_logger_mt("placeholder_name")); -void log_set_expiration_days(unsigned int days) -{ - log_keep_days = days; -} + // Create the new logger + std::vector sinks; + sinks.push_back(std::make_shared()); + sinks.push_back(std::make_shared("log/daily", 23, 59)); + auto combined_logger = std::make_shared("", begin(sinks), end(sinks)); -int log_get_expiration_days(void) -{ - return log_keep_days; -} + //register it if you need to access it globally + //spdlog::register_logger(combined_logger); -int log_init(void) -{ - //spdlog::set_level(spdlog::level::debug); + // Set the new logger as default + spdlog::set_default_logger(combined_logger); + + // Set flush period and default log level + spdlog::flush_every(std::chrono::seconds(5)); + spdlog::set_level(spdlog::level::info); return 1; } -void log_destroy(void) +void log_destroy() { - + spdlog::shutdown(); } + +void log_set_level(unsigned int level) +{ + spdlog::level::level_enum spdlog_level; + + switch (level) { + case SPDLOG_LEVEL_TRACE: + spdlog_level = spdlog::level::trace; + break; + + case SPDLOG_LEVEL_DEBUG: + spdlog_level = spdlog::level::debug; + break; + + case SPDLOG_LEVEL_INFO: + spdlog_level = spdlog::level::info; + break; + + case SPDLOG_LEVEL_WARN: + spdlog_level = spdlog::level::warn; + break; + + case SPDLOG_LEVEL_ERROR: + spdlog_level = spdlog::level::err; + break; + + case SPDLOG_LEVEL_CRITICAL: + spdlog_level = spdlog::level::critical; + break; + + case SPDLOG_LEVEL_OFF: + spdlog_level = spdlog::level::off; + break; + + default: + return; + } + + spdlog::set_level(spdlog_level); +} \ No newline at end of file diff --git a/src/libthecore/src/main.cpp b/src/libthecore/src/main.cpp index 2c2aa3a..6d73ecd 100644 --- a/src/libthecore/src/main.cpp +++ b/src/libthecore/src/main.cpp @@ -6,7 +6,6 @@ */ #define __LIBTHECORE__ #include "stdafx.h" -#include "memory.h" LPHEART thecore_heart = NULL; @@ -14,37 +13,6 @@ volatile int shutdowned = false; volatile int tics = 0; unsigned int thecore_profiler[NUM_PF]; -static int pid_init(void) -{ -#ifdef __WIN32__ - return true; -#else - FILE* fp; - if ((fp = fopen("pid", "w"))) - { - fprintf(fp, "%d", getpid()); - fclose(fp); - SPDLOG_INFO("Start of pid: {}", getpid()); - } - else - { - SPDLOG_ERROR("pid_init(): could not open file for writing. (filename: ./pid)"); - return false; - } - return true; -#endif -} - -static void pid_deinit(void) -{ -#ifdef __WIN32__ - return; -#else - remove("./pid"); - SPDLOG_INFO("End of pid"); -#endif -} - int thecore_init(int fps, HEARTFUNC heartbeat_func) { #if defined(__WIN32__) || defined(__linux__) @@ -55,9 +23,6 @@ int thecore_init(int fps, HEARTFUNC heartbeat_func) #endif signal_setup(); - if (!log_init() || !pid_init()) - return false; - thecore_heart = heart_new(1000000 / fps, heartbeat_func); return true; } @@ -89,8 +54,6 @@ int thecore_idle(void) void thecore_destroy(void) { - pid_deinit(); - log_destroy(); } int thecore_pulse(void)