demo:log4cpp的使用示例。
This commit is contained in:
parent
cb438335b0
commit
0e8abc5bee
19
.vscode/settings.json
vendored
19
.vscode/settings.json
vendored
@ -1,7 +1,8 @@
|
||||
{
|
||||
"files.autoSave": "onFocusChange",
|
||||
"editor.fontSize": 15,
|
||||
"editor.fontFamily": "'Mononoki Nerd Font Mono', 'Mononoki Nerd Font Mono', 'Mononoki Nerd Font Mono'",
|
||||
"editor.fontFamily": "'JetBrainsMono NFM', 'JetBrainsMono NFM', 'JetBrainsMono NFM'",
|
||||
"editor.fontLigatures": true,
|
||||
"cmake.configureOnOpen": true,
|
||||
"cmake.debugConfig": {
|
||||
"externalConsole": true,
|
||||
@ -20,7 +21,7 @@
|
||||
"args": ["--path", "D:/", "--name", "Java", "-q", "C:/Qt/Qt6.6.3/6.6.3/msvc2019_64", "-t", "2"]
|
||||
},
|
||||
"cmake.environment": {
|
||||
"PATH": "${env:PATH};C:/Qt/gnu_6.6.3/bin;"
|
||||
"PATH": "${env:PATH};C:/Qt/gnu_6.6.3/bin;C:/library/gnu/log4cplus/bin"
|
||||
},
|
||||
"cmake.options.statusBarVisibility": "visible",
|
||||
"cmake.generator": "Ninja",
|
||||
@ -118,6 +119,18 @@
|
||||
"cstdarg": "cpp",
|
||||
"deque": "cpp",
|
||||
"future": "cpp",
|
||||
"shared_mutex": "cpp"
|
||||
"shared_mutex": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"coroutine": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"memory_resource": "cpp",
|
||||
"random": "cpp",
|
||||
"regex": "cpp",
|
||||
"source_location": "cpp",
|
||||
"numbers": "cpp",
|
||||
"semaphore": "cpp",
|
||||
"span": "cpp",
|
||||
"stdfloat": "cpp",
|
||||
"cinttypes": "cpp"
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(CMAKE_PREFIX_PATH
|
||||
"C:/Qt/gnu_6.6.3"
|
||||
"E:/library/gnu"
|
||||
"C:/library/gnu"
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
@ -20,7 +20,7 @@ endif()
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
MESSAGE(STATUS "Add MinGW Param.")
|
||||
add_compile_options(-finput-charset=utf-8)
|
||||
#add_compile_options(-fexec-charset=utf-8)
|
||||
#add_compile_options(-fexec-charset=GBK)
|
||||
endif()
|
||||
|
||||
message(STATUS "System: ${CMAKE_SYSTEM_NAME}")
|
||||
|
93
log4config.properties
Normal file
93
log4config.properties
Normal file
@ -0,0 +1,93 @@
|
||||
# ALL TRACE DEBUG INFO WARN ERROR FATAL OFF
|
||||
log4cplus.rootLogger = TRACE,SA,LC
|
||||
log4cplus.logger.logConsole = INFO,LC
|
||||
|
||||
# 代码里面通过 log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("logConsole"));获取。
|
||||
|
||||
#For database stuff, I don't need to logging everything, it's enough printing only errors!
|
||||
#log4cplus.logger.DatabaseOperations=ERROR
|
||||
#log4cplus.additivity.file=false
|
||||
|
||||
log4cplus.appender.LC=log4cplus::ConsoleAppender
|
||||
#log4cplus.appender.LC.EnCoding=utf-8
|
||||
log4cplus.appender.LC.EnCoding=GB2312
|
||||
log4cplus.appender.LC.layout=log4cplus::PatternLayout
|
||||
log4cplus.appender.LC.layout.ConversionPattern=[%D{%m/%d/%y %H:%M:%S.%q}][%t][%-5p] %c - %m %n
|
||||
|
||||
#设置日志追加到文件尾
|
||||
log4cplus.appender.SA=log4cplus::TimeBasedRollingFileAppender
|
||||
#log4cplus.appender.SA.File = Mylogger.log
|
||||
# 必须要先手动创建好log目录;否则无法创建文件
|
||||
log4cplus.appender.SA.FilenamePattern= ./%d{yyyy-MM-dd_HH-mm}.log
|
||||
log4cplus.appender.SA.Schedule = MINUTELY
|
||||
log4cplus.appender.SA.CreateDirs = true
|
||||
log4cplus.appender.SA.MaxHistory = 9999
|
||||
log4cplus.appender.SA.RollOnClose = false
|
||||
#设置日志文件大小
|
||||
log4cplus.appender.SA.MaxFileSize = 100MB
|
||||
#设置生成日志最大个数
|
||||
log4cplus.appender.SA.MaxBackupIndex = 100
|
||||
log4cplus.appender.SA.Append = true
|
||||
log4cplus.appender.SA.layout=log4cplus::PatternLayout
|
||||
# log4cplus.appender.SA.layout.ConversionPattern=[%-5p][%D{%m/%d/%y %H:%M:%S:%Q}] [%t] %c - %m [%l]%n
|
||||
log4cplus.appender.SA.layout.ConversionPattern=[%D{%m/%d/%y %H:%M:%S.%q}][%t][%-5p] %c - %m %n
|
||||
|
||||
#设置日志级别范围
|
||||
log4cplus.appender.SA.filters.1=log4cplus::spi::LogLevelRangeFilter
|
||||
log4cplus.appender.SA.filters.1.LogLevelMin=DEBUG
|
||||
log4cplus.appender.SA.filters.1.LogLevelMax=FATAL
|
||||
log4cplus.appender.SA.filters.1.AcceptOnMatch=true
|
||||
log4cplus.appender.SA.filters.2=log4cplus::spi::DenyAllFilter
|
||||
|
||||
# (1)"%%",转义为%, 即,std::string pattern = "%%" 时输出"%"。
|
||||
# (2)"%c",输出logger名称,比如std::string pattern ="%c" 时输出: "test_logger.subtest",
|
||||
# 也可以控制logger名称的显示层次,比如"%c{1}"时输出"test_logger",其中数字表示层次。
|
||||
# (3)"%D",显示本地时间,当std::string pattern ="%D" 时输出:"2004-10-16 18:55:45",%d显示标准时间,
|
||||
# 所以当std::string pattern ="%d" 时输出"2004-10-16 10:55:45" (因为北京时间位于东8区,差8个小时)。
|
||||
# 可以通过%d{...}定义更详细的显示格式,比如%d{%H:%M:%s}表示要显示小时:分钟:秒。大括号中可显示的预定义标识符如下:
|
||||
# %a -- 表示礼拜几,英文缩写形式,比如"Fri"
|
||||
# %A -- 表示礼拜几,比如"Friday"
|
||||
# %b -- 表示几月份,英文缩写形式,比如"Oct"
|
||||
# %B -- 表示几月份,"October"
|
||||
# %c -- 标准的日期+时间格式,如 "Sat Oct 16 18:56:19 2004"
|
||||
# %d -- 表示今天是这个月的几号(1-31)"16"
|
||||
# %H -- 表示当前时刻是几时(0-23),如 "18"
|
||||
# %I -- 表示当前时刻是几时(1-12),如 "6"
|
||||
# %j -- 表示今天是哪一天(1-366),如 "290"
|
||||
# %m -- 表示本月是哪一月(1-12),如 "10"
|
||||
# %M -- 表示当前时刻是哪一分钟(0-59),如 "59"
|
||||
# %p -- 表示现在是上午还是下午, AM or PM
|
||||
# %q -- 表示当前时刻中毫秒部分(0-999),如 "237"
|
||||
# %Q -- 表示当前时刻中带小数的毫秒部分(0-999.999),如 "430.732"
|
||||
# %S -- 表示当前时刻的多少秒(0-59),如 "32"
|
||||
# %U -- 表示本周是今年的第几个礼拜,以周日为第一天开始计算(0-53),如 "41"
|
||||
# %w -- 表示礼拜几,(0-6, 礼拜天为0),如 "6"
|
||||
# %W -- 表示本周是今年的第几个礼拜,以周一为第一天开始计算(0-53),如 "41"
|
||||
# %x -- 标准的日期格式,如 "10/16/04"
|
||||
# %X -- 标准的时间格式,如 "19:02:34"
|
||||
# %y -- 两位数的年份(0-99),如 "04"
|
||||
# %Y -- 四位数的年份,如 "2004"
|
||||
# %Z -- 时区名,比如 "GMT"
|
||||
# (4)"%F",输出当前记录器所在的文件名称,比如std::string pattern ="%F" 时输出: "main.cpp"。
|
||||
# (5)"%L",输出当前记录器所在的文件行号,比如std::string pattern ="%L" 时输出: "51"
|
||||
# (6)"%l",输出当前记录器所在的文件名称和行号,比如std::string pattern ="%l" 时输出"main.cpp:51"。
|
||||
# (7)"%m",输出原始信息,比如std::string pattern ="%m" 时输出: "teststr",即上述代码中LOG4CPLUS_DEBUG的第二个参数,这种实现机制可以确保原始信息被嵌入到带格式的信息中。
|
||||
# (8)"%n",换行符,没什么好解释的。
|
||||
# (9)"%p",输出LogLevel,比如std::string pattern ="%p" 时输出: "DEBUG"。
|
||||
# (10)"%t",输出记录器所在的线程ID,比如std::string pattern ="%t" 时输出: "1075298944"。
|
||||
# (11)"%x",嵌套诊断上下文NDC (nested diagnostic context) 输出,从堆栈中弹出上下文信息,NDC可以用对不同源的log信息(同时地)交叉输出进行区分,关于NDC方面的详细介绍会在下文中提到。
|
||||
# (12)格式对齐,比如std::string pattern ="%-10m"时表示左对齐,宽度是10,此时会输出"teststr ",当然其它的控制字符也可以相同的方式来使用,比如"%-12d","%-5p"等等。
|
||||
|
||||
# 《主要类》
|
||||
# Filter
|
||||
# 过滤器,过滤输出消息
|
||||
# Layout
|
||||
# 布局器,控制输出消息的格式
|
||||
# Appender
|
||||
# 挂接器,与布局器和过滤器紧密配合,将特定格式的消息过滤后输出到所挂接的设备终端如屏幕,文件等
|
||||
# Logger
|
||||
# 记录器,保存并跟踪对象日志信息变更的实体,当你需要对一个对象进行记录时,就需要生成一个logger。
|
||||
# Hierarchy
|
||||
# 分类器,层次化的树型结构,用于对被记录信息的分类,层次中每一个节点维护一个logger的所有信息
|
||||
# LogLevel
|
||||
# 优先权,包括TRACE, DEBUG, INFO, WARNING, ERROR, FATAL。
|
@ -3,9 +3,8 @@ project (net_server)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
|
||||
include_directories()
|
||||
include_directories(../util)
|
||||
|
||||
add_executable(net_server main.cpp
|
||||
net_server.cpp net_server.h
|
||||
)
|
||||
target_link_libraries(net_server PRIVATE net_com util log4cplus::log4cplus)
|
||||
target_link_libraries(net_server PRIVATE util net_com log4cplus::log4cplus)
|
||||
|
@ -1,18 +1,76 @@
|
||||
#include "net_server.h"
|
||||
#include <log4cplus/log4cplus.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "net_server.h"
|
||||
|
||||
|
||||
class CDemoLogger
|
||||
class CDemoLogger
|
||||
{
|
||||
public:
|
||||
log4cplus::Initializer initializer;
|
||||
|
||||
public:
|
||||
void inita()
|
||||
{
|
||||
// 第1步:创建ConsoleAppender(实例化一个appender对象)
|
||||
log4cplus::SharedAppenderPtr appender(new log4cplus::ConsoleAppender());
|
||||
// 第2步:设置Appender的名称和输出格式(SimpleLayout)
|
||||
appender->setName(LOG4CPLUS_TEXT2("console"));
|
||||
// 第3步:实例化一个layout对象,将layout对象绑定到appender对象
|
||||
log4cplus::tstring pattern =
|
||||
LOG4CPLUS_TEXT("%D{%m/%d/%y %H:%M:%S,%Q} [%t] %-5p %c - %m [%l]%n");
|
||||
appender->setLayout(std::unique_ptr<log4cplus::Layout>(
|
||||
new log4cplus::PatternLayout(pattern)));
|
||||
// 第4步:实例化一个封装了日志输出的Logger对象,并设置其日志输出等级阈值
|
||||
log4cplus::Logger logger =
|
||||
log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("test"));
|
||||
// 第5步:将appender对象绑定到logger对象
|
||||
logger.addAppender(appender);
|
||||
// 第6步:设置日志log的优先级
|
||||
logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);
|
||||
// 使用宏将日志输出
|
||||
LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
LOG4CPLUS_DEBUG(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
LOG4CPLUS_ERROR(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
LOG4CPLUS_FATAL(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
}
|
||||
void initb()
|
||||
{
|
||||
log4cplus::initialize();
|
||||
log4cplus::PropertyConfigurator::doConfigure(
|
||||
LOG4CPLUS_TEXT("D:/Code/nettrans/log4config.properties"));
|
||||
|
||||
log4cplus::Logger logger = log4cplus::Logger::getRoot();
|
||||
|
||||
//log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("logConsole"));
|
||||
LOG4CPLUS_INFO_FMT(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
std::string data("中文测试2");
|
||||
std::string data3(u8"中文测试3");
|
||||
std::cout << data << std::endl;
|
||||
std::cout << data3 << std::endl;
|
||||
LOG4CPLUS_WARN_FMT(logger, u8"Hello world 中文测试5 %d", 3434);
|
||||
LOG4CPLUS_WARN_FMT(logger, "Hello world 中文测试6 %d", 3434);
|
||||
LOG4CPLUS_WARN_FMT(logger, data.c_str());
|
||||
LOG4CPLUS_DEBUG(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
LOG4CPLUS_ERROR(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
LOG4CPLUS_FATAL(logger, LOG4CPLUS_TEXT("Hello world"));
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
CNetServer server;
|
||||
server.run();
|
||||
std::cout << "Done" << std::endl;
|
||||
// CNetServer server;
|
||||
// server.run();
|
||||
// std::cout << "Done" << std::endl;
|
||||
|
||||
// #ifdef _WIN32
|
||||
// system("chcp 65001");
|
||||
// #endif
|
||||
|
||||
CDemoLogger log;
|
||||
//log.inita();
|
||||
log.initb();
|
||||
|
||||
std::cin.get();
|
||||
return 0;
|
||||
|
@ -2,16 +2,17 @@
|
||||
|
||||
CNetServer::CNetServer()
|
||||
{
|
||||
log_ = CLogger::getLogger();
|
||||
log_ = CLogger::getLogger();
|
||||
}
|
||||
|
||||
void CNetServer::run()
|
||||
{
|
||||
log_->info("start run...");
|
||||
log_->debug("start run2...");
|
||||
log_->warn("收到发斯蒂芬");
|
||||
log_->warn(u8"收到发斯蒂芬");
|
||||
|
||||
log_->error("there have a error info:[{}]", "Java");
|
||||
|
||||
system("chcp");
|
||||
}
|
||||
|
Reference in New Issue
Block a user