更改日志输出路径
如果不做修改,zookeeper的日志信息默认都打印到了zookeeper.out文件中,这样输出路径和大小没法控制,因为日志文件没有轮转。以是必要修改日志输出方式。具体操纵如下:
1.修改${zkhome}/bin/zkEnv.sh
ZOO_LOG_DIR指定想要输出到哪个目录,ZOO_LOG4J_PROP指定INFO,ROLLINGFILE的日志APPENDER.
- if [ "x${ZOO_LOG_DIR}" = "x" ]
- then
- # 指定想要输出到哪个目录
- ZOO_LOG_DIR="/apps/logs/zookeeper"
- fi
- if [ "x${ZOO_LOG4J_PROP}" = "x" ]
- then
- # 指定日志生成规则
- ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
- fi
- if [ "$JAVA_HOME" != "" ]; then
- JAVA="$JAVA_HOME/bin/java"
- else
- JAVA=java
- fi
复制代码 2.修改$ZOOKEEPER_HOME/conf/log4j.properties文件
zookeeper.root.logger的值与前一个文件的ZOO_LOG4J_PROP 保持同等,该日志配置是以日志文件大小轮转的,如果想要按照天轮转,可以修改为DaliyRollingFileAppender.
RollingFileAppender按log文件最大长度限度天生新文件,DailyRollingFileAppender按日期天生新文件。
- # Define some default values that can be overridden by system properties
- zookeeper.root.logger=INFO,ROLLINGFILE
- zookeeper.console.threshold=INFO
- zookeeper.log.dir=.
- zookeeper.log.file=zookeeper-1.log
- zookeeper.log.threshold=DEBUG
- zookeeper.tracelog.dir=.
- zookeeper.tracelog.file=zookeeper_trace.log
- #
- #
- # Add ROLLINGFILE to rootLogger to get log file output
- # Log DEBUG level and above messages to a log file
- log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
- log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
- log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
- # Max log file size of 10MB
- #log4j.appender.ROLLINGFILE.MaxFileSize=10MB
- # uncomment the next line to limit number of backup files
- #log4j.appender.ROLLINGFILE.MaxBackupIndex=10
复制代码 3.去掉zookeeper.out文件
美中不敷的是在你设定的目录中, 仍会有zookeeper.out文件存在, 固然它的size=0, 但是仍让我感到不爽.
究其原因是因为zkServer.sh会利用nohup举行zookeeper的启动, 然而nohup一定会输出一个日志文件到你设置的目录中。必要将此处的逻辑修改掉, 就可以将zookeeper.out移除啦, 如果你不是处女座当然可以省略这一步。
干系代码如下:
- _ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
- case $1 in
- start)
- echo -n "Starting zookeeper ... "
- if [ -f "$ZOOPIDFILE" ]; then
- if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
- echo $command already running as process `cat "$ZOOPIDFILE"`.
- exit 0
- fi
- fi
- nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
- -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
复制代码 按照日期轮循输出
log4j提供RollingFileAppender和DailyRollingFileAppender将日志记载输出到文件。RollingFileAppender按log文件最大长度限度天生新文件,DailyRollingFileAppender按日期天生新文件。
- log4j.rootCategory=INFO, CONSOLE,R
- log4j.appender.R=org.apache.log4j.RollingFileAppender
- log4j.appender.R.File=${catalina.base}/logs/portal.log
- log4j.appender.R.Encoding=GBK
- log4j.appender.R.MaxFileSize=256KB
- log4j.appender.R.Append=true
- log4j.appender.R.MaxBackupIndex=10
- log4j.appender.R.layout=org.apache.log4j.PatternLayout
- 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
- log4j.rootCategory=INFO, CONSOLE,DailyRolling
- log4j.appender.DailyRolling=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.DailyRolling.File=${catalina.base}/logs/portal.log
- log4j.appender.DailyRolling.DatePattern=yyyy-MM-dd'.log'
- log4j.appender.DailyRolling.layout=org.apache.log4j.PatternLayout
- log4j.appender.DailyRolling.layout.ConversionPattern=%-d %t %-5p [%c{1}:%L] %m%n
复制代码 ZooKeeper利用的log4j.properties的主要部分:
- [java] view plain copy
- zookeeper.root.logger=INFO, CONSOLE (1)
- zookeeper.console.threshold=INFO
- zookeeper.log.dir=.
- zookeeper.log.file=zookeeper.log
- zookeeper.log.threshold=DEBUG
- zookeeper.tracelog.dir=.
- zookeeper.tracelog.file=zookeeper_trace.log
- log4j.rootLogger=${zookeeper.root.logger} (2)
- log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender (3)
- log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold} (4)
- log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout (5)
- log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] -
- ...
- log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender (6)
- log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} (7)
- log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
- log4j.appender.ROLLINGFILE.MaxFileSize=10MB
- log4j.appender.ROLLINGFILE.MaxBackupIndex=10
- log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
- log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] -
- ...
复制代码 (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企服之家,中国第一个企服评测及商务社交产业平台。 |