qt log4qt 不同级别日志保存不同日志文件

fengyoujie 2013-01-11 02:52:13
各位老师好!
我在qt 中配置 log4j 使用的是log4qt,其他都没有问题。需要配置不同级别的日志保存不同的日志文件时,出现如下错误:

error Log4Qt::Factory - Cannot convert to type 'Level' for property 'threshold' on object of class 'Log4Qt::DailyRollingFileAppender' <Log4Qt::Factory::CONFIGURATOR_UNKNOWN_TYPE_ERROR,29>


配置文件清单log4qt.properties


# Libfetion-gui project
# define the root logger with two appenders writing to console and file
log4j.rootLogger =DEBUG,Console,Roll_INFO,Roll_ERROR,Roll_DEBUG
####outputlog to console#########
#define the appender named CONSOLE
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p %x %m%n

log4j.appender.Roll_INFO=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Roll_INFO.File=logs/info_log.txt
log4j.appender.Roll_INFO.Threshold = INFO
log4j.appender.Roll_INFO.layout=org.apache.log4j.PatternLayout
log4j.appender.Roll_INFO.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

log4j.appender.Roll_DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Roll_DEBUG.File=logs/debug_log.txt
log4j.appender.Roll_DEBUG.Threshold = DEBUG
log4j.appender.Roll_DEBUG.layout=org.apache.log4j.PatternLayout
log4j.appender.Roll_DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n


日志也能保存。问题是:
我想不同级别的日志保存到不同的日志文件:即 info 级别保存到info_log.txt日志文件,debug 级别保存到debug_log.txt。
但是结果是:所有级别的日志都分别保存在 info_log.txt 和 debug_log.txt文件。也就是说info_log.txt 和debug_log.txt文件的内容是一样的,都保存了debug 和 info级别的日志。

出差上述红色的那样的问题,请问诸位老师改如何配置文件,才能满足我上面的需求呢?
...全文
1281 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingwang-cs 2014-10-23
  • 打赏
  • 举报
回复
哦,那个追加写日志的问题解决了,那每天想自动生成一个新的日志,原来的日志文件名后面以时间命名。怎么设置呢?
jingwang-cs 2014-10-23
  • 打赏
  • 举报
回复
您好。这个日志,每次程序启动后,会重新生成把原来的覆盖,这个如何解决呀?
fengyoujie 2013-01-29
  • 打赏
  • 举报
回复
引用 1 楼 fengyoujie 的回复:
问题解决了。现在分享一下我解决的方法,希望对大家有帮助。 上面贴着发的log4j.appender.Roll_INFO.Threshold = INFO,在log4qt不支持这个。 这个去掉。 我们可以通过设置不同的logger名称,指定不同的logger,然后设置不同的logger的存储日志的路径。 也就是说log4qt可以定义很多logger,这些logg……
可以通过代码来动态设置文件的名称。 Log4Qt::Logger *a1 = Log4Qt::Logger::logger("A1"); 得到log之后,可以设置一些log 的属性,包括存储的文件名称。
INOVA_GEO 2013-01-21
  • 打赏
  • 举报
回复
你好,我想在配置文件中生成的log名称格式为“当前日期加时间”不知道该怎么弄? log4j.rootLogger=DEBUG,A1,R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=./log/log.txt log4j.appender.R.AppendFile=true log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%L][%t] [%c] [%p] - %L%m%n
fengyoujie 2013-01-14
  • 打赏
  • 举报
回复
问题解决了。现在分享一下我解决的方法,希望对大家有帮助。 上面贴着发的log4j.appender.Roll_INFO.Threshold = INFO,在log4qt不支持这个。 这个去掉。 我们可以通过设置不同的logger名称,指定不同的logger,然后设置不同的logger的存储日志的路径。 也就是说log4qt可以定义很多logger,这些logger可以做不同的设置(当然也包括日志路径) 配置文件需要做如下修改:

# Libfetion-gui project
# define the root logger with two appenders writing to console and file
 log4j.rootLogger =DEBUG,Console
####outputlog to console#########
#define the appender named CONSOLE
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p %x %m%n
 
log4j.logger.A1=DEBUG,CONSOLE,A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=logs/a1.txt
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

log4j.logger.A2=DEBUG,CONSOLE,A2 
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=logs/a2.txt
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n


log4j.logger.A3=DEBUG,CONSOLE,A3 
log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A3.File=logs/a3.txt
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
这样就定义了不同的logger(A1,A2,A3) 在代码中做如下修改: 加载配置文件:

Log4Qt::BasicConfigurator::configure();
Log4Qt::PropertyConfigurator::configure(QCoreApplication::applicationDirPath() + "/log4qt.properties");

Log4Qt::Logger *a1 = Log4Qt::Logger::logger("A1");
al->info("the message of log");//the log save at logs/a1.log 

Log4Qt::Logger *a2 = Log4Qt::Logger::logger("A2");
a2->info("the message of log");//the log save at logs/a2.log 

Log4Qt::Logger *a3 = Log4Qt::Logger::logger("A3");
a3->info("the message of log");//the log save at logs/a3.log 
如果任何疑问,请给我留言。

16,780

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧