02u-00-log-认识log模块

1. 重点内容

  • 日志模块介绍
  • 全局系统运行日志
  • 自定义一个日志输出

2.  运行展示

3. 程序示例

 

 ​​​​​3.1 日志模块介绍

log是用于系统日志的输出,日志在开发、测试、维护阶段都很有用处,开发或利用一个合适强大的日志框架是很有必要的。

日志模块当前选用了两种第三方日志框架,分别是Qt内部的日志与log4qt日志,peanutlib封装这两种日志框架,提供一个统一的输出接口,例如,输出一个debug日志:

if(PlBaseApplication::getGlobalLogger()->isDebug()) {

LOG_DEBUG(PlBaseApplication::getGlobalLogger(), QObject::tr("debug日志"));

}

日志输出统一接口有五种级别,下面是输出代码举例:

LOG_DEBUG(PlBaseApplication::getGlobalLogger(), QObject::tr("debug日志"));

LOG_INFO(PlBaseApplication::getGlobalLogger(), QObject::tr("info日志"));

LOG_WARN(PlBaseApplication::getGlobalLogger(), QObject::tr("warn日志"));

LOG_ERROR(PlBaseApplication::getGlobalLogger(), QObject::tr("error日志"));

LOG_FATAL(PlBaseApplication::getGlobalLogger(), QObject::tr("fatal日志"));

3.2 全局系统运行日志

​​​​​​​3.2.1 日志配置参数

系统运行日志在peanutlib中是全局的对象,PlBaseApplication::getGlobalLogger()就可以得到它,您可以在项目中任何想输出日志的地方使用到它,它的配置项在peanut_setting.ini文件中,我们看看该文件是如何配置。

[Log]

#日志模块选用,目前支持两种日志,peanut::PlQtLogController与peanut::PlLog4qtController

LogClassName=peanut::PlQtLogController

#日志模块选用,QLog对应peanut::PlQtLogController,Log4qt对应peanut::PlLog4qtController

LogType=QLog

#Log4qt对应的配置文件存放目录

LogFilePathName=./config/log4qt.conf

#日志debug开关,true:打开;false:关闭

isDebug=true

#日志info开关,true:打开;false:关闭

isInfo=true

#日志warn开关,true:打开;false:关闭

isWarn=true

#日志error开关,true:打开;false:关闭

isError=true

#日志fatal开关,true:打开;false:关闭

isFatal=true

#输出日志时,是否发送信号, true:在控制台输出,接收端能收到;false:不能

isSendSingal=true

#是否按缺省日志输出格式输出,true:是;false:不按默认的格式输出

isConversionPattern=true

#是否启动日志输出界面,true:启动;false:不启动

isLogForm=true

  • 如果您要关闭日志的debug功能(debug通常是在开发测试阶段打开,在运维阶段可以关闭),可设置isDebug=false。
  • 如果您不希望启动日志输出界面,可以关闭,那么当您使用

PlLogForm *logForm = app->getGlobalLogForm();

logForm将是一个空对象。

  • 如果您想关闭所有日志输出,可将isDebug,isInfo,isError,,isWarm,isFatal开关全部关闭。

​​​​​​​3.2.2 选用日志框架

日志框架目前QLog对应peanut::PlQtLogController与Log4qt对应peanut::PlLog4qtController,属于二选一的方式,QLog是Qt内嵌的(头文件<QDebug>),如果您对日志输出的功能局限于展示查看,选用它足够了。Log4qt是第三方的日志框架,它出自于Java的log4j的C++ Qt版本,它的功能比较强大,您可以选用它做除了显示查看之外的其它事情,比如,日志输出文件,在项目中已放置了一个log4qt.conf的配置文件,相关配置说明可参考其它文档,下面是该文档的一个例子,您可以在此基础上修改它。

#log4j.rootLogger=DEBUG,CONSOLE,A1,im
#log4j.rootLogger=INFO,CONSOLE,A1,im
#log4j.rootLogger=OFF
#log4j.rootLogger=DEBUT,stdout
#log4j.rootLogger=INFO,stdout
#log4j.rootLogger=INFO,A1,A1-STDOUT
log4j.rootLogger=DEBUG,A1,A1-STDOUT
 
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

log4j.addivity.org.apache=true

###################
# Pattern to output the caller's line number.
###################
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

###################
# Pattern to output the caller's file name.
###################
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=system.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n



###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[peanut] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n


#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file
log4j.appender.FILE.DatePattern='.'yyyyMMdd-HH
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[peanut] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis



########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[peanut] %d - %c -%-4r [%t] %-5p %c %x - %m%n


####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n


########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000


########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@hollycrm.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@hollycrm.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[peanut] %d - %c -%-4r [%t] %-5p %c %x - %m%n


########################
# JDBC Appender
#######################
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[peanut] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#A1
## 每天生产一个文件
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=peanut.log
#log4j.appender.A1.DatePattern='.'yyyyMMdd-HH'.log'
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[peanut] - %m%n  
#log4j.appender.A1.layout.ConversionPattern=[peanut] %d{yyyy-MM-dd HH\:mm\:ss,SSS} [%p] - %m%n  
#log4j.appender.A1.Threshold=DEBUG
#log4j.appender.A1.Append=true
#log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#log4j.appender.A1.layout.ConversionPattern=[peanut] %d - %c -%-4r [%t] %-5p %c %x - %m%n


#A1-STDOUT
log4j.appender.A1-STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.A1-STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.A1-STDOUT.layout.ConversionPattern=[peanut] %d{yyyy-MM-dd HH\:mm\:ss,SSS} [%p] - %m%n 

###################
# Appender
###################
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net

log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[peanut] %d - %c -%-4r [%t] %-5p %c %x - %m%n

​​​​​​​3.3 自定义一个日志输出

自定义一个日志输出,我们在前面的“01u-00-bean-认识bean模块”,“01u-01-bean-自定义一个模块”中就有对日志模块的BeanConfig说明。

在此基础上,我们还可以根据需求,定义多个日志bean对象,请看下面的beanConfig的配置,定义logBean_1,logBean_2,logBean_3。

 <beanConfig chooseBeanId="logBeanQtlog" className="peanut::PlLogBeanConfig" id="logBeanConfigSample" name="LogModule" type="Log">
        <bean isDebug="true" className="peanut::PlQtLogController" isWarn="true" id="logBean_1" name="" isSendSingal="true" isLogForm="false" isError="true" isConversionPattern="true" isFatal="true" isInfo="true" type="QLog"/>
        <bean className="peanut::PlLog4qtController" id="logBean_2" filePath="./config/log4qt.conf" name="" isSendSingal="true" isLogForm="false" isConversionPattern="true" type="Log4qt"/>
        <bean isDebug="true" className="peanut::PlQtLogController" isWarn="true" id="logBean_3" name="" isSendSingal="true" isLogForm="false" isError="true" isConversionPattern="true" isFatal="true" isInfo="true" type="QLog"/>
 </beanConfig>

4. 代码下载

代码下载链接:https://pan.baidu.com/s/10DHJG1g8t-7jb9wIr_OGLA?pwd=jm8z 提取码: jm8z

Peanutlib项目演示程序下载:peanut_pwdis: pwdis是QT应用系统开发框架(C++),采用分层模块化设计,底层peanutlib按模块封装方便易用的类库及API(xml,db,appconfig,log,grid,json,bean等十几个),应用层提供部门人员权限及报表等,还提供了开发中常用的组件使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积木虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值