1. 程式人生 > >linux 查詢 java 日誌輸出兩份日誌

linux 查詢 java 日誌輸出兩份日誌

在 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

命令,吧日誌又輸出一次,所以我們會看到日誌被列印兩次,實際上是一次,只不過我們看到了兩次而已。