log4cpp和log4cplus,log4cplus使用
项目日志——Log4cpp开源的C类库Log4cpp提供了很多功能,帮助我们的应用程序更方便地记录日志。安装与构建Log4cpp官网—— http://log4cpp.sourceforge.net/wget https://nchc . dl . SourceForge . net/project/log 4 CPP/log 4 CPP 1.1 . x(新)
cd log4cpp
#根用户。/configure - prefix=执行路径
# 示例
# ./configure-prefix=/home/宣萱/share_bike/third/lib/log4cpp
制造
进行安装使用包含头文件#include log4cpp/Category.hh
#包括日志4c PP/文件附加器。倍硬
#包括日志4c PP/模式布局。倍硬
#包括日志4c PP/ostreamappender。倍硬初始化日志输出的目的地示例1:输出到标准输出标准* cout
log 4 CPP:Appender * Appender=new log 4 CPP:OstreamAppender( root ,STD:cout);示例2:输出到原木文件
log 4 CPP:Appender * Appender=new log 4 CPP:file Appender( root , test。log’);输出方式如下:
log4cpp:FileAppender //输出到文件
log4cpp:RollingFileAppender //输出到回卷文件,即当文件到达某个大小后回卷
log4cpp:OstreamAppender //输出到一个牡蛎类
log 4 CPP:RemoteSyslogAppender//输出到远程系统记录服务器
log4cpp:StringQueueAppender //内存队列
log4cpp:SyslogAppender //本地系统记录
log4cpp:Win32DebugAppender //发送到缺省系统调试器
log4cpp:NTEventLogAppender //发送到胜利事件日志注意:
实际上日志输出到终端或文件中是很慢的,可能会引起超正析象管(图片Orthicon)中断,所以我们可以先输出到内存中(StringQueueAppender),然后在输出到其它地方,这样效率较高。
设置日志输出格式log 4 CPP:模式布局*模式布局=new log 4 CPP:模式布局();
模式布局-setConversionPattern(" % d[% p]-% m % n ");
appender-set布局(模式布局);日志输出格式控制如下:
log4cpp:PatternLayout类引用
%%%% -单个百分号
%c -类别
%d -日期
日期格式:日期格式字符后面可以跟一个用大括号括起来的日期格式说明符。例如,%d{%H:%M:%S,%l}或%d{%d %m %Y %H:%M:%S,%l} .如果没有给出日期格式说明符,则使用以下格式:“1980年1月2日02时03分55秒结婚”.日期格式说明符允许使用与ANSI C函数得到指定格式的时间相同的语法,但增加了一点。加法运算是毫秒的说明符%l,用零填充以形成3位数。
%m -消息
%n -平台特定的行分隔符
%p -优先级
自创建此布局以来已有%r毫秒。
自1970年一月一日以来的%R秒
自进程启动以来的%u时钟周期
% x-NDC设置输出类别和日志优先级log 4 CPP:Category root=log 4 CPP:Category:getRoot();
根。设置优先级(log 4 CPP:Priority:NOTICE);
根。添加appender(附加器);日志的级别如下:
不设置调试信息通知警告错误严重警告致命=紧急。
低于该级别的日志不会被记录。
定义宏来减少代码量# define LOG(_ _ level)LOG 4c PP:Category:getRoot()LOG 4c PP:Priority:_ _ level _ _ FILE _ _ _ _ LINE _ _ :使用:
记录(调试)"调试";测试什么是单例?
程序中仅有一个的对象。配置文件:log.conf
#定义根类别的属性
log4cpp.rootCategory=DEBUG,RootLog
#定义根日志属性
log 4 CPP。阑尾手术。根日志=滚动文件附加器
log 4 CPP。阑尾手术。根日志。布局=图案布局
log 4 CPP。阑尾手术。根日志。布局。转换模式=% d { % M-% d % H:% M:% S % l }[% t][% p]% M % n
log 4 CPP。阑尾手术。根日志。文件名=/var/log/share _ bike。原木
log 4 CPP。阑尾手术。根日志。最大文件大小=268435456 # 256 MB
log 4 CPP。阑尾手术。根日志。文件名模式=share _ bike _ % I . log
log 4 CPP。阑尾手术。根日志。maxbackupindex=256封装为一个类Logger.h
#ifndef DISTRIBUTED_LOGGER_H_
#定义分布式记录器_H_
#包含字符串
#include log4cpp/Category.hh
类记录器{
公共:
布尔初始化(常量标准:字符串日志文件);
静态记录器*实例(){//返回单例——全局唯一对象
返回实例_;
}
log4cpp:Category* GetHandle(){
返回类别_;
}
受保护:
静态记录器实例_;
log 4 CPP:Category * Category _;
};
# define LOG _ INFO Logger:instance()-GetHandle()-INFO
# define LOG _ DEBUG Logger:instance()-GetHandle()-DEBUG
# define LOG _ ERROR Logger:instance()-GetHandle()-ERROR
# define LOG _ WARN Logger:instance()-GetHandle()-WARN
#endifLogger.cpp
#include Logger.h
#包括输入输出流
#include log4cpp/Category.hh
#包括日志4c PP/文件附加器。倍硬
#包括日志4c PP/模式布局。倍硬
#包括日志4c PP/ostreamappender。倍硬
#包括日志4c PP/属性配置器。倍硬
Logger Logger:instance _;
bool Logger:init(const STD:string log _ conf _ file){
尝试{
log 4 CPP:属性配置器:configure(log _ conf _ file);
} catch(日志4c PP:配置失败f){
标准:cerr 加载日志配置文件 log_conf_file.c_str()失败,结果为: f . what()STD:endl;
返回错误的
}
Category _=log 4 CPP:Category:getRoot();
返回真实的
}测试主页面
#include iniconfig.h //注意路径,会在CMake中进行调整
#include configdef.h
#include Logger.h
int main(int argc,char** argv){
如果(argc!=3){//缺少参数
printf(请输入shbk配置文件路径日志文件配置!\ n’);
return-1;
}
如果(!logger:instance()-init(STD:string(argv[2])){
fprintf(stderr,初始化日志模块失败. \ n );
return-2;
}
Iniconfig配置;
如果(!配置。loadfile(STD:string(argv[1]){
//printf(load %s失败. argv[1]);
LOG_ERROR(加载%s失败argv[1]);
return-3;
}
//测试是否读取成功
ST _ env _ config conf _ args=config。getconfig();
日志信息([数据库]IP:% s \ n[数据库]端口:%d\n[数据库]用户:% s \ n[数据库]密码:% s \ n[数据库]数据库:% s \ n[服务器]端口:% d \ n ,
conf_args.db_ip.c_str(),
conf_args.db_port,
conf_args.db_user.c_str(),
conf_args.db_pwd.c_str(),
conf_args.db_name.c_str(),
conf _ argsSVR _ port);
返回0;
}**注意链接库:**下面为示例,请根据自身情况调整。
目标链接库(通用日志4c PP)目标链接库(共享自行车pthread)
TARGET _ LINK _ LIBRARIES($ { PROJECT _ NAME } liblog 4c PP。答执行:/共享_自行车./conf/share_bike.ini./conf/log.conf查看:
在日志文件中。var/log/share_bike.log为保存路径。
log 4 CPP。阑尾手术。根日志。文件名=/var/log/share _ bike。原木
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。