在 linux 中,我们经常会在运行一个 jar 程序之后随即打开它的 tail -f /xxx/out.log 功能,然后我们就发现一个奇怪的现象,就是所有的日志都被输出两行,而且日志的内容都是一样的,这个很奇怪,为什么呢?

通常我们的启动脚本这么写:

#!/bin/sh
java -jar dataInsertKeyword.jar &
tail -f /data/logs/dataInsert/dataInsert.log


因为我们通常在配置 log4j.properties 文件的时候就指定的如下的输出格式

#config root logger
log4j.rootLogger = DEBUG,stdout,rolling_file


# Console Appender #
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d[%p] %c[%M(%L)] - %m%n
log4j.appender.stdout.Threshold=INFO



# Rolling File #
log4j.appender.rolling_file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.rolling_file.Threshold=INFO
log4j.appender.rolling_file.encoding=UTF-8
#windows os
log4j.appender.rolling_file.File=/data/logs/out.log
#linux os
#log4j.appender.rolling_file.File=/data/default/default.log
log4j.appender.rolling_file.DatePattern='_'yyyy-MM-dd_HH
log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling_file.layout.ConversionPattern=%d[%p] %c[%M(%L)] - %m%n

这样就导致一个问题,本身在我们启动程序的时候,日志已经被输出到了 stdout 了,stdout 就是输出到控制台的意思,本来就输出一次了,然后我们又执行了

tail -f /data/logs/dataInsert/dataInsert.log

命令,吧日志又输出一次,所以我们会看到日志被打印两次,实际上是一次,只不过我们看到了两次而已。





GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐