demo:log4cpp的使用示例。

This commit is contained in:
taynpg 2024-07-17 12:41:03 +08:00
parent cb438335b0
commit 0e8abc5bee
6 changed files with 179 additions and 15 deletions

19
.vscode/settings.json vendored
View File

@ -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"
}
}

View File

@ -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
View 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。

View File

@ -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)

View File

@ -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;

View File

@ -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");
}