Zookeeper 日志输出到指定文件夹,并按照日期轮循输出

打印 上一主题 下一主题

主题 865|帖子 865|积分 2595

更改日志输出路径

如果不做修改,zookeeper的日志信息默认都打印到了zookeeper.out文件中,这样输出路径和大小没法控制,因为日志文件没有轮转。以是必要修改日志输出方式。具体操纵如下:
1.修改${zkhome}/bin/zkEnv.sh

ZOO_LOG_DIR指定想要输出到哪个目录,ZOO_LOG4J_PROP指定INFO,ROLLINGFILE的日志APPENDER.
  1. if [ "x${ZOO_LOG_DIR}" = "x" ]
  2. then
  3.         # 指定想要输出到哪个目录
  4.     ZOO_LOG_DIR="/apps/logs/zookeeper"
  5. fi
  6. if [ "x${ZOO_LOG4J_PROP}" = "x" ]
  7. then
  8.         # 指定日志生成规则
  9.     ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
  10. fi
  11. if [ "$JAVA_HOME" != "" ]; then
  12.   JAVA="$JAVA_HOME/bin/java"
  13. else
  14.   JAVA=java
  15. fi
复制代码
2.修改$ZOOKEEPER_HOME/conf/log4j.properties文件

zookeeper.root.logger的值与前一个文件的ZOO_LOG4J_PROP 保持同等,该日志配置是以日志文件大小轮转的,如果想要按照天轮转,可以修改为DaliyRollingFileAppender.
RollingFileAppender按log文件最大长度限度天生新文件,DailyRollingFileAppender按日期天生新文件。
  1. # Define some default values that can be overridden by system properties
  2. zookeeper.root.logger=INFO,ROLLINGFILE
  3. zookeeper.console.threshold=INFO
  4. zookeeper.log.dir=.
  5. zookeeper.log.file=zookeeper-1.log
  6. zookeeper.log.threshold=DEBUG
  7. zookeeper.tracelog.dir=.
  8. zookeeper.tracelog.file=zookeeper_trace.log
  9. #
  10. #
  11. # Add ROLLINGFILE to rootLogger to get log file output
  12. #    Log DEBUG level and above messages to a log file
  13. log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
  14. log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
  15. log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
  16. # Max log file size of 10MB
  17. #log4j.appender.ROLLINGFILE.MaxFileSize=10MB
  18. # uncomment the next line to limit number of backup files
  19. #log4j.appender.ROLLINGFILE.MaxBackupIndex=10
复制代码
3.去掉zookeeper.out文件

美中不敷的是在你设定的目录中, 仍会有zookeeper.out文件存在, 固然它的size=0, 但是仍让我感到不爽.
究其原因是因为zkServer.sh会利用nohup举行zookeeper的启动, 然而nohup一定会输出一个日志文件到你设置的目录中。必要将此处的逻辑修改掉, 就可以将zookeeper.out移除啦, 如果你不是处女座当然可以省略这一步。
干系代码如下:
  1. _ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
  2. case $1 in
  3. start)
  4.     echo  -n "Starting zookeeper ... "
  5.     if [ -f "$ZOOPIDFILE" ]; then
  6.       if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
  7.          echo $command already running as process `cat "$ZOOPIDFILE"`.
  8.          exit 0
  9.       fi
  10.     fi
  11.     nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
  12.     -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
复制代码
按照日期轮循输出

log4j提供RollingFileAppenderDailyRollingFileAppender将日志记载输出到文件。RollingFileAppender按log文件最大长度限度天生新文件,DailyRollingFileAppender按日期天生新文件。
  1. log4j.rootCategory=INFO, CONSOLE,R
  2. log4j.appender.R=org.apache.log4j.RollingFileAppender
  3. log4j.appender.R.File=${catalina.base}/logs/portal.log
  4. log4j.appender.R.Encoding=GBK
  5. log4j.appender.R.MaxFileSize=256KB
  6. log4j.appender.R.Append=true
  7. log4j.appender.R.MaxBackupIndex=10
  8. log4j.appender.R.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.R.layout.ConversionPattern=%-d %t %-5p [%c{1}:%L] %m%n
复制代码
上面是利用RollingFileAppender的写法,将会在Tomcat的logs目录下,天生portal.log文件,当文件大小高出256KB时,将原来的文件更名为portal.log.1,再利用portal.log吸收新的日志记载。
log4j.appender.R.MaxBackupIndex=10表示只保存10个备份文件。
下面是利用DailyRollingFileAppender的写法,配置完成的当天, 会在Tomcat的logs目录下,天生名为portal.log的文件,比现在天是2010-01-13, 到明天这个文件将更名为portal.log2010-01-13.log
  1. log4j.rootCategory=INFO, CONSOLE,DailyRolling
  2. log4j.appender.DailyRolling=org.apache.log4j.DailyRollingFileAppender
  3. log4j.appender.DailyRolling.File=${catalina.base}/logs/portal.log
  4. log4j.appender.DailyRolling.DatePattern=yyyy-MM-dd'.log'  
  5. log4j.appender.DailyRolling.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.DailyRolling.layout.ConversionPattern=%-d %t %-5p [%c{1}:%L] %m%n
复制代码
ZooKeeper利用的log4j.properties的主要部分:
  1. [java] view plain copy
  2.         zookeeper.root.logger=INFO, CONSOLE  (1)  
  3.         zookeeper.console.threshold=INFO  
  4.         zookeeper.log.dir=.  
  5.         zookeeper.log.file=zookeeper.log  
  6.         zookeeper.log.threshold=DEBUG  
  7.         zookeeper.tracelog.dir=.  
  8.         zookeeper.tracelog.file=zookeeper_trace.log  
  9.         log4j.rootLogger=${zookeeper.root.logger} (2)  
  10.         log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender (3)  
  11.         log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold} (4)  
  12.         log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout (5)  
  13.         log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] -  
  14.         ...  
  15.         log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender (6)  
  16.         log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} (7)  
  17.         log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}  
  18.         log4j.appender.ROLLINGFILE.MaxFileSize=10MB  
  19.         log4j.appender.ROLLINGFILE.MaxBackupIndex=10  
  20.         log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout                  
  21.         log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] -  
  22.         ...   
复制代码
(1) 第一组设置以zookeeper开头,它们现实上是Java system property,可以被-D形式的下令行参数覆盖。第一行配置了日志级别,默认的设置是说在INFO级别以下的日志会被抛弃,并且日志会利用CONSOLE appender输出。你可以指定多个appender,比方如果你想利用CONSOLE appender和ROLLINGFILE appender输出日志,那么可以配置zookeeper.logger为INFO,CONSOLE,ROLLINGFILE。
(2) rootLogger处理惩罚全部日志的logger,因为我们没有界说其他logger。
(3) 这一行把CONSOLE appender和现实上处理惩罚日志输出的类绑定在一起,这里是ConsoleAppender类。
(4) appender也可以过滤日志。这一行将过滤任安在INFO级别之下的日志,因为这是在zookeeper.root.logger设置的threshold。
(5) appender利用一个布局(layout)类在输出前对日志举行格式化。我们利用pattern layout来记载日志的级别,日期,线程信息和调用位置信息以及消息自己。
(6) RollingFileAppender实现了rolling日志文件的功能,而不是持续的写到一个单独的文件或者控制台。如果rootLogger没有关联ROLLINGFILE,则此appender会被忽略。
(7) ROLLINGFILE的threshold设置成DEBUG。因为rootLogger过滤了全部在INFO级别之下的日志,没有DEBUG日志会输出到ROLLINGFILE。如果你想要看到DEBUG日志,你必须把zookeeper.root.logger从INFO改成DEBUG。
打日志会影响到进程的性能,尤其是在DEBUG级别下。同时日志会提供有价值的信息为诊断错误提供线索。一个平衡性能开销的有效方式是把appender的threshold设成DEBUG,并把rootLogger设成WARN级别,这在一般的情况都适用,一般只必要关注WARNING和它之上的日志。当你必要诊断题目时可以利用JMX动态设置为INFO或DEBUG级别,这样可以更方便定位题目。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表