You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.2 KiB
C

#pragma once
#include "spdlog/spdlog.h"
#include "spdlog/async_logger.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/details/thread_pool.h"
#include "spdlog/details/thread_pool-inl.h"
#include "spdlog/sinks/daily_file_sink.h"
#include "spdlog/async.h" //support for async logging
//<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
#define LOG_NAME "multi_sink"
//<2F><>װ<EFBFBD>꣬û<EAA3AC>иú<D0B8><C3BA>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>кŵ<D0BA><C5B5><EFBFBD>Ϣ
#define LOG_TRACE(...) SPDLOG_LOGGER_CALL(spdlog::get(LOG_NAME), spdlog::level::trace, __VA_ARGS__)
#define LOG_DEBUG(...) SPDLOG_LOGGER_CALL(spdlog::get(LOG_NAME), spdlog::level::debug, __VA_ARGS__)
#define LOG_INFO(...) SPDLOG_LOGGER_CALL(spdlog::get(LOG_NAME), spdlog::level::info, __VA_ARGS__)
#define LOG_WARN(...) SPDLOG_LOGGER_CALL(spdlog::get(LOG_NAME), spdlog::level::warn, __VA_ARGS__)
#define LOG_ERROR(...) SPDLOG_LOGGER_CALL(spdlog::get(LOG_NAME), spdlog::level::err, __VA_ARGS__)
#define LOG_CRITI(...) SPDLOG_LOGGER_CALL(spdlog::get(LOG_NAME), spdlog::level::critical, __VA_ARGS__)
class ML_Log
{
public:
//<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
enum OutPosition {
CONSOLE = 0x01, //<2F><><EFBFBD><EFBFBD>̨
FILE = 0X02, //<2F>ļ<EFBFBD>
CONSOLE_AND_FILE = 0x03, //<2F><><EFBFBD><EFBFBD>̨+<2B>ļ<EFBFBD>
};
enum OutMode {
SYNC, //ͬ<><CDAC>ģʽ
ASYNC, //<2F>첽ģʽ
};
//<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
enum OutLevel {
LEVEL_TRACE = 0,
LEVEL_DEBUG = 1,
LEVEL_INFO = 2,
LEVEL_WARN = 3,
LEVEL_ERROR = 4,
LEVEL_CRITI = 5,
LEVEL_OFF = 6,
};
public:
ML_Log();
~ML_Log();
/* func: <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־ͨ<D6BE><CDA8>
* @para[in] nFileName : <EFBFBD><EFBFBD>־<EFBFBD>·<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>;<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @para[in] nMaxFileSize : <EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С <EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>1024*1024*10<EFBFBD><EFBFBD>
* @para[in] nMaxFile : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD> <EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>10<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>
* @para[in] outMode : <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @para[in] outPos : <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨+<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
* @para[in] outLevel : <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD> <EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>>=<EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
*/
bool Init(const char* nFileName, const int nMaxFileSize = 1024 * 1024 * 10, const int nMaxFile = 10,
const OutMode outMode = SYNC, const OutPosition outPos = CONSOLE_AND_FILE, const OutLevel outLevel = LEVEL_TRACE);
void UnInit();
private:
public:
std::shared_ptr<spdlog::logger> m_pLogger;
bool m_bInit;
};