安装
Logger:记录日志的句柄
Appender:用于指定内容的输出位置,如:控制台,文件、远程服务器等;一个 Logger 可添加多个 Appender,从而向多个地方输出日志。 Layout:用于指定日志输出的格式;每个Appender 需要设置一个 Layout
demo
#include "/home/wdy/Cplus/Logcpp/add.h"
#include "/home/wdy/Cplus/Logcpp/Log.h"
int add(int a,int b)
{
if (a==0 && b==0)
LOG_WARN("a,b both are zero");
else
LOG_TRACE("a,b ------?");
if(a >0)
{
LOG_INFO("///");
}
return a+b;
}
//-------add.cpp
int add(int a,int b);
-------------------------------------------------------------------------------//
#include <log4cplus/logger.h>
#include <log4cplus/consoleappender.h>
#include <log4cplus/fileappender.h>
#include <log4cplus/layout.h>
#include <log4cplus/configurator.h>
#include "Log.h"
Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("logmain"));
void InitLogger(bool daemonized)
{
if (daemonized)
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("/your/path/log4cplusd.conf"));// shohu进程
else
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("./log4cplus.conf"));//
}
#pragma once
#include <log4cplus/logger.h>
#include <log4cplus/loggingmacros.h>
using namespace log4cplus;
using namespace log4cplus::helpers;
//global object
extern Logger logger;
// define some macros for simplicity
#define LOG_TRACE(logEvent) LOG4CPLUS_TRACE(logger, logEvent)
#define LOG_DEBUG(logEvent) LOG4CPLUS_DEBUG(logger, logEvent)
#define LOG_INFO(logEvent) LOG4CPLUS_INFO(logger, logEvent)
#define LOG_WARN(logEvent) LOG4CPLUS_WARN(logger, logEvent)
#define LOG_ERROR(logEvent) LOG4CPLUS_ERROR(logger, logEvent)
#define LOG_FATAL(logEvent) LOG4CPLUS_FATAL(logger, logEvent)
extern void InitLogger(bool daemonized);
#include "/home/wdy/Cplus/Logcpp/Log.h"
#include <stdlib.h>
#include <iostream>
#include "add.h"
using namespace std;
int main(int argc, char **argv)
{
InitLogger(false);
cout << "OK" << endl;
LOG_TRACE("trace");
LOG_INFO("info");
LOG_ERROR("error");
int li_res = add(0,0);
li_res = add(9,9);
li_res = add(0,7);
}
CC = g++
INCLUDE = include
CFLAGS += -o3 -g -llog4cplus
CPP = Log_main.cpp Log.cpp add.cpp
EXEC = test_log
all:
$(CC) $(CFLAGS) $(CPP)-o $(EXEC)
配置文件
#配置文件
#ERROR 表明要输出的日志级别(FATAL, ERROR, WARN, INFO, DEBUG, TRACE,由高到低)如果定义为TRACE,则所有级别的日志都可以输出,如果定义为ERROR,则只能输出FATAL和ERROR,后面的file,errorFile是定义的输出文件
log4cplus.logger.logmain=ERROR,file,errorFile
#如果日志文件要带日期,则要定义成 log4cplus::TimeBasedRollingFileAppender
log4cplus.appender.file=log4cplus::TimeBasedRollingFileAppender
log4cplus.appender.file.Threshold=TRACE
log4cplus.appender.file.CreateDirs=true
log4cplus.appender.file.Append=true
#定义日志文件名
log4cplus.appender.file.FilenamePattern=log/%d{yyyy-MM-dd}.log
log4cplus.appender.file.MaxHistory=1
log4cplus.appender.file.CleanHistoryOnStart=true
log4cplus.appender.file.RollOnClose=false
log4cplus.appender.file.layout=log4cplus::PatternLayout
#日志输出格式
log4cplus.appender.file.layout.ConversionPattern=%D{ %Y-%m-%d %H:%M:%S.%q} %5p %c: %m (%l)%n
# 错误文件Appender
log4cplus.appender.errorFile=log4cplus::TimeBasedRollingFileAppender
log4cplus.appender.errorFile.Threshold=ERROR
log4cplus.appender.errorFile.CreateDirs=true
log4cplus.appender.errorFile.Append=true
log4cplus.appender.errorFile.FilenamePattern=log/%d{yyyy-MM-dd}.error
log4cplus.appender.errorFile.MaxHistory=365
log4cplus.appender.errorFile.CleanHistoryOnStart=true
log4cplus.appender.errorFile.RollOnClose=false
log4cplus.appender.errorFile.layout=log4cplus::PatternLayout
log4cplus.appender.errorFile.layout.ConversionPattern=%D{ %Y-%m-%d %H:%M:%S.%q} %5p %c: %m (%l)%n
PatternLayout 格式说明
PatternLayout 是一种具有词法分析功能的布局器,优点类似正则表达式。以“%”作为开头的特殊预定义标识符,可以产生特殊的格式信息。PatternLayout 格式有以下选项:
“%%”,转义为%
“%c”,输出logger名称,如 logger.sublogger。也可以控制logger名称的显示层次,比如"%c{1}“时输出"logger”,其中数字表示层次
“%D”,显示本地时间,比如:“2021-06-30 18:55:45”,%d显示标准时间
可以通过%d{…}定义更详细的时间显示格式,大括号中可显示的预定义标识符如下
%a – 表示星期几的英文缩写形式,比如"Fri"
%A – 表示星期几的英文全称,比如"Friday"
%b – 表示月份的英文缩写形式,比如"Oct"
%B – 表示月份的英文全称,“October”
%c – 标准的日期+时间格式,如"Fri June 30 18:56:19 2021"
%d – 表示日期(1-31)
%H – 表示24小时格式的小时(0-23)
%I – 表示12小时格式的小时(1-12)
%p – 表示现在是上午还是下午,AM or PM
%j – 表示一年中的第几天(1-366)
%m – 表示月份(1-12)
%M – 表示分钟(0-59)
%S – 表示当前时刻的多少秒(0-59),如"32"
%q – 表示毫秒(0-999
%Q – 表示带小数毫秒(0-999.999),如 “430.732”
%U – 表示是今年的第几周,以周日为第一天开始计算(0-53)
%W – 表示是今年的第几周,以周一为第一天开始计算(0-53)
%w – 表示星期几,(0-6,星期天为0)
%x – 标准的日期格式,如"10/16/04"
%X – 标准的时间格式,如"19:02:34"
%y – 两位数的年份(0-99),如"21"表示2021年
%Y – 四位数的年份,如"2021"
%Z – 时区名,比如"GMT"
“%F”,输出当前记录器所在的文件名称,比如"main.cpp"
“%L”,输出当前记录器所在的文件行号,比如"51"
“%l”,输出当前记录器所在的文件名称和行号,比如"main.cpp:51"
“%m”,输出原始信息。
“%n”,换行符。
“%p”,输出LogLevel,比如"DEBUG"
“%t”,输出记录器所在的线程ID,比如 “1075298944”
“%x”,嵌套诊断上下文NDC (nested diagnostic context) 输出,从堆栈中弹出上下文信息,NDC可以用对不同源的log信息(同时地)交叉输出进行区分。
格式对齐,比如"%-10m"时表示左对齐,宽度是10,当然其它的控制字符也可以相同的方式来使用,比如"%-12d","%-5p"等等
//------------------------------------------------------------------------------------------------------------------------
参考文章
C++实现日志功能:log4cplus(Win10+VS2017)_爱看书的小沐的博客-CSDN博客_log4cplus