使用過zookeeper的小伙伴都知道,當前終端處於哪個目錄,執行完zkServer.sh start命令, zookeeper.out就會寫在哪個目錄,下次想看zookeeper日志的時候,又忘記上次在哪執行的命令啦,這真的很蛋疼(雖然可以每次固定在某個目錄執行),在多次痛苦之后,決定修改日志輸出到固定目錄,方便問題定位。
查看bin目錄下的zkEnv.sh找到了這一行,發現如果沒有配置ZOO_LOG_DIR,默認就是保存在終端所在當前目錄下,所以果斷修改(或者可以在上面配置ZOO_LOG_DIR這個變量)
ZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs"
將日志文件寫到zookeeper安裝目錄下的logs文件夾中(logs不需要創建,它會自己創建)
美中不足的是在你設定的目錄中, 仍會有zookeeper.out文件存在, 雖然它的size=0,究其原因是因為zkServer.sh會使用nohup進行zookeeper的啟動, 然而nohup必然會輸出一個日志文件到你設置的目錄中,
相關代碼如下, 需要將此處的邏輯修改掉, 就可以將zookeeper.out移除啦,
最后修改 bin/zkServer.sh
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.log"
ok,完成!
既然改都改了,為什么不改的徹底一點呢?讓他按照天進行滾動
繼續修改bin目錄下的zkEnv.sh,修改為:
將
ZOO_LOG4J_PROP="INFO,CONSOLE"
修改為:
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
修改conf/log4j.properties文件
其它可配置參數:
log4j.appender.ROLLINGFILE.File=zookeeper.log
log4j.appender.ROLLINGFILE.DataPattern='.'yyyy-MM-dd-HH-mm
log4j.appender.ROLLINGFILE.Threshold=debug
log4j.appender.ROLLINGFILE.encoding=UTF-8
log4j.appender.ROLLINGFILE.Append=false
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern= [%d{yyyy-MM-dd HH\:mm\:ss}]%-5p %c(line\:%L) %x-%m%n
DailyRollingFileAppender特點是固定周期時間生成一個日志文件,比如,默認情況是每天生成一個文件。這種日志可以方便根據時間來定位日志位置,使日志清晰易查。但是這種日志有個不好地方是,不能限制日志數量,MaxBackupIndex屬性和MaxFileSize在DailyRollingFileAppender中是無效的,這個還是按照自己的需求來定!
所以還需要自己弄個Crontab定期清理日志
腳本定期清理zk快照和日志文件
正常運行過程中,ZK會不斷地把快照數據和事務日志輸出到dataDir和dataLogDir這兩個目錄,並且如果沒有人為操作的話,ZK自己是不會清理這些文件的。 我這里采用腳本切割。
#!/bin/bash
#清理zookeeper的日志 保留7天內的
#
datadir=/opt/zookeeper/zkdata/version-2
logdir=/opt/zookeeper/log/version-2
cd $datadir
find . -mtime +7 |xargs rm -rf
cd $logdir
find . -mtime +7 |xargs rm -rf
#########################################################################
注意:如果僅僅是清理快照日志數據:在zoo.cfg中配置即可
-
autopurge.snapRetainCount=20 #保留日志快照數量
-
autopurge.purgeInterval=48 #保留48小時內的日志數據
轉自
————————————————
版權聲明:本文為CSDN博主「笨鳥先飛-天道酬勤」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/dehu_zhou/article/details/81939965