DTK日志管理RollingFileAppender

前言

DTK日志管理DLogManager讲了DTK默认的日志管理器DLogManager,它提供了一个默认的实现,特别适合编写deepin或者uos应用。
但是如果我们需要对日志输出做自定义配置怎么办呢?比如配置单个日志文件的大小、回滚日志文件的个数等。
DTK提供的RollingFileAppender类可以完成这样的自定义。实际上DLogManager使用的就是RollingFileAppender。

简介

顾名思义,RollingFileAppender就是一个提供回滚的日志文件存储类。

RollingFileAppender自定义

自定义日志文件路径

文件路径通过RollingFileAppender构造函数传入:

auto rollingFileAppender = new RollingFileAppender(mylogPath);

需要注意两点:

  • 这里的日志文件路径是日志文件的路径,而不是日志目录
  • 日志目录(传入的日志文件路径的父目录)需要自己创建,RollingFileAppender不负责创建目录,只负责写日志文件

自定义日志文件格式

rollingFileAppender->setFormat(myformat)

默认的日志格式是:

"%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] [%{file:-20} %{function:-35} %{line}] %{message}\n"

格式自定义的自由度很大,简单看下支持的内容:

  • 时间
    需要输出时间可以加上%{time},如果还需要自定义时间的格式,可以在后面加上{}里面写上时间格式,比如%{time}{dd-MM-yyyy, HH:mm},时间格式字符串参考QDateTime。
  • 日志级别
    日志级别有四种输出格式
    – 大驼峰的格式%{type},例如:DEBUG级别输出Debug
    – 大写的格式%{Type},例如:DEBUG级别输出DEBUG
    – 小写的首字母%{typeOne},例如:DEBUG级别输出d
    – 大写的首字母%{TypeOne},例如:DEBUG级别输出D
  • 源文件名称
    输出源文件名称有两种格式:
    – 输出全路径%{File}
    – 仅输出文件名%{file}
  • 行号
    行号就是%{line}
  • 函数名称
    函数名称有两种格式
    – 输出完成完整函数信息%{Function}
    – 仅输出函数名%{function},去掉返回值类型、参数列表、模板参数
  • 日志内容
    日志内容对应%{message}
  • log category
    %{category},这个暂时不明白是啥,有大佬知道可以说下
  • 应用程序名称
    添加%{appname}
  • 进程id
    添加%{pid}
  • 线程id
    添加%{threadid}

以上就是所有支持自定义的内容,另外,上面每一项设置字符串输出宽度和对齐方式,比如%{file:-20}就是右对齐,不足20个字符填充空格。

自定义日志文件大小

默认是20M,可以修改为10M,如下:

rollingFileAppender->setLogSizeLimit(1024 * 1024 * 10)

自定义滚动频率

默认是每天滚动一次,可以修改为每周滚动一次,如下:

rollingFileAppender->setDatePattern(RollingFileAppender::WeeklyRollover);

另外,如果单个文件大小超过限制,即使没到滚动时机,也会滚动。
滚动频率有以下几种:

滚动频率备注
RollingFileAppender::MinutelyRollover每分钟滚动一次
RollingFileAppender::HourlyRollover每小时滚动一次
RollingFileAppender::HalfDailyRollover每半天滚动一次
RollingFileAppender::DailyRollover每天滚动一次
RollingFileAppender::WeeklyRollover每周滚动一次
RollingFileAppender::MonthlyRollover每月滚动一次

RollingFileAppender使用

以上讲了如何创建RollingFileAppender进行自定义,那自定义的RollingFileAppender对象如何集成到日志系统中了,这里需要用到Dtk::Core::Logger,它是一个DTK提供的单例日志操作类,通过registerAppender方法将RollingFileAppender对象配置到日志系统中:

logger->registerAppender(rollingFileAppender);

举例:

#include <Logger.h>

DCORE_USE_NAMESPACE

void initLogSystem()
{
	auto logPath = "~/Desktop/logTest";
	if (!QDir(logPath ).exists()){
        QDir(logPath ).mkpath(logPath );
    }
    auto rollingFileAppender = new RollingFileAppender(logPath+ "/test.log");
    rollingFileAppender ->setFormat("%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] [%{file:-20} %{function:-35} %{line}] %{message}\n");
    rollingFileAppender ->setLogFilesLimit(4);
    rollingFileAppender->setLogSizeLimit(1024 * 1024 * 10)
    rollingFileAppender ->setDatePattern(RollingFileAppender::WeeklyRollover );
    logger->registerAppender(rollingFileAppender );
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值