log4cplus 自定义 配置文件 格式

log4cplus 自定义 配置文件 格式

参考

Log4Cplus 学习笔记 - 配置文件的使用
https://blog.csdn.net/kakiebu/article/details/105501833

log4cplus 使用方法 配置
https://blog.csdn.net/lx_shudong/article/details/48732999
log4cPLus的搭建使用
https://blog.csdn.net/LyRics1996/article/details/119848198
log4cplus的相关说明使用以及示例
https://blog.csdn.net/leacock1991/article/details/109209959

Linux log工具:编译安装log4cplus及使用示例
https://blog.csdn.net/weixin_44498318/article/details/115544863

        配置文件中的格式如下:

(1"%%",转义为% 。
(2"%c",输出logger名称,如test.subtest 。也可以控制logger名称的显示层次,比如"%c{1}"时输出"test",其中数字表示层次。
(3"%D",显示本地时间,比如:"2004-10-16 18:55:45"%d显示标准时间。     可以通过%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",输出当前记录器所在的文件名称,比如"main.cpp"5"%L",输出当前记录器所在的文件行号,比如"51"6"%l",输出当前记录器所在的文件名称和行号,比如"main.cpp:51"7"%m",输出原始信息。
(8"%n",换行符。
(9"%p",输出LogLevel,比如"DEBUG"10"%t",输出记录器所在的线程ID,比如 "1075298944"11"%x",嵌套诊断上下文NDC (nested diagnostic context) 输出,从堆栈中弹出上下文信息,NDC可以用对不同源的log信息(同时地)交叉输出进行区分。
(12)格式对齐,比如"%-10m"时表示左对齐,宽度是10,当然其它的控制字符也可以相同的方式来使用,比如"%-12d""%-5p"等等。

将日志输出到控制台并写入文件:

例2:将日志输出到控制台并写入文件

#include "pch.h"
#include <iostream>
#include <log4cplus/logger.h>
#include <log4cplus/fileappender.h>
#include <log4cplus/layout.h>
#include <log4cplus/ndc.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/property.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/initializer.h>

#include <log4cplus/log4cplus.h>


using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;

#pragma comment(lib,"log4cplusSUD.lib")  

const int LOOP_COUNT = 20000;

int main()
{
	//第1步:用Initializer类进行初始化
	log4cplus::Initializer initializer;
	//第2步:创建ConsoleAppender;
	//SharedAppenderPtr 指向一个Appender的指针,这里new 了一个 ConsoleAppender
	log4cplus::SharedAppenderPtr consoleAppender(new log4cplus::ConsoleAppender());
	// std::ios_base::app 每次进行写入操作的时候都会重新定位到文件的末尾.
	log4cplus::SharedAppenderPtr fileAppender(new log4cplus::FileAppender(LOG4CPLUS_TEXT("./logs/log.txt"), std::ios_base::app, true, true));

	//第3步:设置consoleAppender的名称和输出格式(SimpleLayout) fileAppender的名称和pattern格式(PatternLayout)
	// unique_ptr 智能指针
	consoleAppender->setName(LOG4CPLUS_TEXT("console"));
	consoleAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::SimpleLayout));
	fileAppender->setName(LOG4CPLUS_TEXT("file"));
	// 参见 https://log4cplus.sourceforge.io/docs/html/classlog4cplus_1_1PatternLayout.html
	//2020/10/16 16:13:03,481.502 [140068134246208] INFO  test - Hello world [/home/leacock/CLionProjects/Log4CplusDemo/OutputLogToFileAndConsle/main.cpp:33]
	// %D{%Y/%m/%d %H:%M:%S,%Q} 2020/10/16 16:13:03,481.502 时间 %D 表本地时间, 年/月/日/ 时:分:秒:毫秒
	//[%t]  [140068134246208] 输出生成日志事件的线程的线程id
	//%-5p  INFO  输出日志事件的日志级别  %-5 如果名称小于5个字符长,则右侧加空格。
	//%c  test 用于输出记录日志的是哪个logger,这里 在getInstance(LOG4CPLUS_TEXT ("test"))设置了名称
	//%m  Hello world  输出与logger关联的应用程序提供消息。
	//%l 等同于 "%F:%L"   F:用于输出日志请求发出时的文件名 L:用于输出从何处发出日志请求的行号。
	//%n 输出换行
	log4cplus::tstring pattern = LOG4CPLUS_TEXT("%D{%Y/%m/%d %H:%M:%S,%Q} [%t] %-5p %c - %m [%l]%n");
	fileAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::PatternLayout(pattern)));

	//第4步:获得一个Logger实例,并设置其日志输出等级阈值
	log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("test"));
	logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);

	//第5步:为Logger实例添加ConsoleAppender 与 FileAppender
	logger.addAppender(consoleAppender);
	logger.addAppender(fileAppender);

	//第6步:使用宏将日志输出
	LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Hello world"));

	return 0;
}

输出到控制台,同时输出到回滚文件

#include "pch.h"
#include <iostream>
#include <log4cplus/logger.h>
#include <log4cplus/fileappender.h>
#include <log4cplus/layout.h>
#include <log4cplus/ndc.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/property.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/initializer.h>

#include <log4cplus/log4cplus.h>


using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;

#pragma comment(lib,"log4cplusSUD.lib")  

const int LOOP_COUNT = 20000;

int main()
{
	// 1 初始化
	log4cplus::Initializer initializer;
	// 2 创建 appender
	log4cplus::SharedAppenderPtr rollingFileAppender(new log4cplus::RollingFileAppender(LOG4CPLUS_TEXT("./logs/roll_log/roll_file_log"), 200 * 1024, 5, true, true));
	//    // 3 设置consoleAppender的名称和输出格式,这里使用缺省的 TTCCLayout 格式
	//    rollingFileAppender->setName(LOG4CPLUS_TEXT("roll file test"));
	//    rollingFileAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new  log4cplus::TTCCLayout()));

	rollingFileAppender->setName(LOG4CPLUS_TEXT("roll file test"));
	log4cplus::tstring pattern = LOG4CPLUS_TEXT("%D{%Y/%m/%d %H:%M:%S,%Q} [%t] %-5p %c - %m [%l]%n");
	rollingFileAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::PatternLayout(pattern)));

	// 4 获得一个Logger实例,并设置其日志输出等级阈值
	log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("roll_file"));
	logger.setLogLevel(log4cplus::TRACE_LOG_LEVEL);

	// 5 为Logger实例添加RollingFileAppender
	logger.addAppender(rollingFileAppender);


	//第2步:创建ConsoleAppender;
	//SharedAppenderPtr 指向一个Appender的指针,这里new 了一个 ConsoleAppender
	log4cplus::SharedAppenderPtr consoleAppender(new log4cplus::ConsoleAppender());
	//第3步:设置consoleAppender的名称和输出格式(SimpleLayout) fileAppender的名称和pattern格式(PatternLayout)
	// unique_ptr 智能指针
	consoleAppender->setName(LOG4CPLUS_TEXT("console"));
	consoleAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::SimpleLayout));

	logger.addAppender(consoleAppender);

	for (int i = 0; i < 5000; i++) {
		LOG4CPLUS_DEBUG(logger, "Entering loop #" << i);
	}

	return 0;
}

2.6 重定向到文件
三种FileAppender构造函数:

/* 1、一般文件输出 */
FileAppender(const log4cplus::tstring& filename, /* 文件名 */
             std::ios_base::openmode mode = std::ios_base::trunc, /* 文件类型,默认trunc将先前文件删除 */
             bool immediateFlush = true, /* 是否每次写一条记录都刷新一次缓存,一般为true */
             bool createDirs = false); 	 /* 是否创建目录 */

/* 2、按日志文件大小输出 */
RollingFileAppender(const log4cplus::tstring& filename,
                    long maxFileSize = 10*1024*1024, /* 文件最大尺寸,默认10MB */
                    int maxBackupIndex = 1, 		 /* 最大记录文件数 */
                    bool immediateFlush = true,
                    bool createDirs = false);

/* 3、按时间周期输出 */
DailyRollingFileAppender(const log4cplus::tstring& filename,
                         DailyRollingFileSchedule schedule = DAILY, 
                         /* 存储频度:MONTHLY/WEEKLY/DAILY/TWICE_DAILY/HOURLY/MINUTELY */
                         bool immediateFlush = true,
                         int maxBackupIndex = 10,
                         bool createDirs = false,
                         bool rollOnClose = true,
                         const log4cplus::tstring& datePattern = log4cplus::tstring());

DailyRollingFileAppender 和控制台

#include "pch.h"
#include <iostream>
#include <windows.h>
#include <log4cplus/logger.h>
#include <log4cplus/fileappender.h>
#include <log4cplus/layout.h>
#include <log4cplus/ndc.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/property.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/initializer.h>

#include <log4cplus/log4cplus.h>


using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;

#pragma comment(lib,"log4cplusSUD.lib")  

const int LOOP_COUNT = 20000;

int main()
{
	// 1 初始化
	log4cplus::Initializer initializer;
	// 2 创建 appender
	SharedAppenderPtr _append(new  DailyRollingFileAppender(LOG4CPLUS_TEXT(" Test.log "), MINUTELY, true, 5));
	_append->setName(LOG4CPLUS_TEXT(" file test "));


	// 4 获得一个Logger实例,并设置其日志输出等级阈值
	log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("roll_file"));
	logger.setLogLevel(log4cplus::TRACE_LOG_LEVEL);

	// 5 为Logger实例添加RollingFileAppender
	logger.addAppender(_append);


	//第2步:创建ConsoleAppender;
	//SharedAppenderPtr 指向一个Appender的指针,这里new 了一个 ConsoleAppender
	log4cplus::SharedAppenderPtr consoleAppender(new log4cplus::ConsoleAppender());
	//第3步:设置consoleAppender的名称和输出格式(SimpleLayout) fileAppender的名称和pattern格式(PatternLayout)
	// unique_ptr 智能指针
	consoleAppender->setName(LOG4CPLUS_TEXT("console"));
	consoleAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::SimpleLayout));

	logger.addAppender(consoleAppender);

	for (int i = 0; i < 5000; i++) {
		LOG4CPLUS_DEBUG(logger, "Entering loop #" << i);
		Sleep(100);
	}

	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值