美文网首页
Zookeeper修改zookeeper.out输出路径

Zookeeper修改zookeeper.out输出路径

作者: Habit_1027 | 来源:发表于2022-12-06 16:57 被阅读0次

    Zookeeper中运行日志 zookeeper.out 文件的输出路径默认为启动脚本的当前路径,导致Zookeeper集群启动失败时不便于排查,也不便于清理。因此设置固定路径来保存运行日志。
    注意在此zoo.cfg文件中配置必须使用绝对路径,不能使用环境变量$ZOOKEEPER_HOME,此处是为了描述方便才使用此变量名,把运行日志文件zookeeper.out输出路径指定为$ZOOKEEPER_HOME/log/路径下。

    一、简单配置

    修改$ZOOKEEPER_HOME/bin/zkEnv.sh
    ZOO_LOG_DIR设置成自定义路径,本次设置为ZOO_LOG_DIR="$ZOOBINDIR/../log,其中ZOOBINDIR变量是此脚本开头获取的Zookeeperbin路径,我们直接以此来定位自己的日志路径即可。具体如下

    修改前

     54 if [ "x${ZOO_LOG_DIR}" = "x" ]
     55 then
     56     ZOO_LOG_DIR="."
     57 fi
    

    修改后

     54 if [ "x${ZOO_LOG_DIR}" = "x" ]
     55 then
     56     ZOO_LOG_DIR="$ZOOBINDIR/../log"
     57 fi
    

    这样在每次使用zkSever的时候,都能将运行日志 zookeeper.out 输出到指定路径下,但这样配置有个问题,就是每次运行Zookeeper时,此日志都会被覆盖,而不是append到文件中,故每次运行结束后只会保存有本次运行日志,若单次运行时间很长也会导致日志文件也很大。

    二、进阶配置

    在之前的配置中,我们只是实现了保存本次Zookeeper运行日志在指定路径下,这次我们通过配置$ZOOKEEPER_HOME/conf/log4j.properties来使用log4j日志框架将Zookeeper每次的运行日志都保存到指定路径下

    配置$ZOOKEEPER_HOME/conf/log4j.properties文件

    修改其中的zookeeper.root.loggerzookeeper.log.dirlog4j.appender.ROLLINGFILE.MaxBackupIndex共三个参数。具体如下:

    修改前

    # Define some default values that can be overridden by system properties
    zookeeper.root.logger=INFO, CONSOLE
    zookeeper.console.threshold=INFO
    zookeeper.log.dir=.
    zookeeper.log.file=zookeeper.log
    ···
    
    # Max log file size of 10MB
    #log4j.appender.ROLLINGFILE.MaxFileSize=20MB
    # uncomment the next line to limit number of backup files
    #log4j.appender.ROLLINGFILE.MaxBackupIndex=10
    

    修改后

    # Define some default values that can be overridden by system properties
    zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE
    zookeeper.console.threshold=INFO
    zookeeper.log.dir=/opt/earth/zookeeper/log
    zookeeper.log.file=zookeeper.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.DailyRollingFileAppender
    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=20MB
    # uncomment the next line to limit number of backup files
    #log4j.appender.ROLLINGFILE.MaxBackupIndex=10
    

    其中参数zookeeper.root.logger是设置日志优先级和打印方式,默认为控制台打印CONSOLE,而在zkServer.sh中会启动后台命令,将控制台输出的日志输出重定向到 zookeeper.out 文件中。修改后添加了滚动产生文件输出方式ROLLINGFILE;通过参数zookeeper.log.dir设置日志文件 zookeeper.log的存储路径,这里直接采用绝对路径,相对路径可能不识别;
    通过参数log4j.appender.ROLLINGFILE.MaxBackupIndex设置最大日志数量,每个日志文件大小最大默认为10MB,以此文件大小进行分割,默认日志文件名为 zookeeper.log,其中所有参数都可以自定义修改。

    注意:这里摒弃了原有的日志分割策略,采用按天来分割
    log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender

    修改$ZOOKEEPER_HOME/bin/zkEnv.sh

    将其中的ZOO_LOG4J_PROP设置成与log4j配置文件中相同,避免参数覆盖。具体如下:

    修改前

     59 if [ "x${ZOO_LOG4J_PROP}" = "x" ]
     60 then
     61     ZOO_LOG4J_PROP="INFO,CONSOLE"
     62 fi
    

    修改后

     59 if [ "x${ZOO_LOG4J_PROP}" = "x" ]
     60 then
     61     ZOO_LOG4J_PROP="INFO,CONSOLE,ROLLINGFILE"
     62 fi
    

    修改$ZOOKEEPER_HOME/bin/zkServer.sh

    修改原始输出逻辑,不再将本次运行日志信息所有输出到 zookeeper.out中,而是使用log4j框架输出到zookeeper.log中,便于管理。而 zookeeper.out只用于输出标准错误。具体如下所示:

    修改前

    141     nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    142     -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
    
    # 将原始指令注释,设置新的输出逻辑,只讲标准错误输出到zookeeper.out中.
    

    修改后

    141 #    nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    142 #    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
    143     nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    144     -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" 2> "$_ZOO_DAEMON_OUT" 1> /dev/null &
    

    相关文章

      网友评论

          本文标题:Zookeeper修改zookeeper.out输出路径

          本文链接:https://www.haomeiwen.com/subject/wxkifdtx.html