如何仅为特定行禁用log4j时间戳

时间:2013-11-13 06:58:16

标签: java log4j

我在log4j.properties文件中配置了日志记录,我得到类似这样的输出

2013-11-12 19:33:17,897  - INFO Starting queue dispatching for DaphneStore Queue:  om.fi
2013-11-12 19:33:17,897  - INFO Starting CBR queue dispatching for DaphneStore
2013-11-12 19:33:17,897  - INFO Starting server shutdown

有没有可能我在左侧没有获得某些行的时间戳信息,如下所示

2013-11-12 19:33:17,897  - INFO Starting queue dispatching for DaphneStore Queue: 
Starting CBR queue dispatching for DaphneStore
Starting server shutdown

这是我的log4j配置

# Set root logger to output only ERROR and FATAL events to R appender
log4j.rootLogger=ERROR, R

# Define R appender to output to local log
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.file=D:/logs/abc.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %-5p %c - %m%n

2 个答案:

答案 0 :(得分:2)

快速解决方案:

  • 使用ConversionPattern =%m%n 创建一个不同的appender(这将只打印记录器文本而没有我想的时间戳)。
  • 使用ConversionPattern =%m%n修改exisitng appender。在这里,您可以手动添加时间戳(使用类似SimpleDateFormat的DateFormat)到需要的记录器文本。在其他情况下,将在没有时间戳的情况下将纯文本添加到记录器文件中。

答案 1 :(得分:1)

您可能没有正确使用log4j。每次调用log.info/error/...()都被视为单独的日志消息。

你可能想要做的是这样的事情:

final StringBuilder logmsg = new StringBuilder();
logmsg.append("Starting queue dispatching for DaphneStore Queue: \n");
logmsg.append("Starting CBR queue dispatching for DaphneStore\n");
logmsg.append("Starting server shutdown\n");

log.info(logmsg);

<强>更新

我的意思是时间戳是日志消息的重要组成部分,它说 时发生了什么事。如果您始终不需要此信息,那么您应该将所有时间戳丢失在一起,并在应用程序启动时进行单个日志记录调用以标记:

String moment = (new SimpleDateFormat("yyyy-MM-dd ...")).format(new Date());
log.info(moment + " Application started");