2

我在 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
4

2 回答 2

3

几个快速解决方案:

  • 使用 ConversionPattern=%m%n 创建一个不同的附加程序(我想这只会打印没有时间戳的记录器文本)。
  • 使用 ConversionPattern=%m%n 修改现有附加程序。在这里,您可以在任何需要的地方手动将时间戳(使用像 SimpleDateFormat 之类的 DateFormat)添加到记录器文本中。在其余情况下,纯文本将添加到记录器文件中,不带时间戳。
于 2013-11-13T07:05:15.323 回答
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");
于 2013-11-13T07:45:41.057 回答