zk日志报java路径,Zookeeper修改运行日志zookeeper.out输出路径

前言

Zookeeper中运行日志 zookeeper.out 文件的输出路径默认为启动脚本的当前路径,导致Zookeeper集群启动失败时总是不记得输出日志在哪儿,不便于查找错误原因,因此很有必要设置固定路径来保存运行日志

在本次实验之前已经将 dataDir 和 dataLogDir 分别设置为$ZOOKEEPER_HOME/zkData和$ZOOKEEPER_HOME/logs/transaction,都是在$ZOOKEEPER_HOME/conf/zoo.cfg中配置。值得注意的是在此zoo.cfg文件中配置必须使用绝对路径,不能使用环境变量$ZOOKEEPER_HOME,此处是为了描述方便才使用此变量名

本次实验将把运行日志文件 zookeeper.out 输出路径指定为$ZOOKEEPER_HOME/logs/runtime/路径下

简单配置

修改$ZOOKEEPER_HOME/bin/zkEnv.sh

将ZOO_LOG_DIR设置成自定义路径,本次设置为$ZOOBINDIR/../logs/runtime,其中ZOOBINDIR变量是此脚本开头获取的Zookeeper的bin路径,我们直接以此来定位自己的日志路径即可。具体如下:

# 修改前

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="."

57 #自定义运行日志文件输出路径

58 ZOO_LOG_DIR="$ZOOBINDIR/../logs/runtime"

59 fi

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

进阶配置

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

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

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

# 修改前

zookeeper.root.logger=INFO, CONSOLE

...

zookeeper.log.dir=.

...

#log4j.appender.ROLLINGFILE.MaxBackupIndex=10

# 修改后

zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE

zookeeper.log.dir=/opt/module/zookeeper-3.4.14/logs/runtime

log4j.appender.ROLLINGFILE.MaxBackupIndex=5

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

修改$ZOOKEEPER_HOME/bin/zkEnv.sh

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

# 修改前

61 if [ "x${ZOO_LOG4J_PROP}" = "x" ]

62 then

63 ZOO_LOG4J_PROP="INFO,CONSOLE"

64 fi

# 修改后

61 if [ "x${ZOO_LOG4J_PROP}" = "x" ]

62 then

63 #ZOO_LOG4J_PROP="INFO,CONSOLE"

64 #自定义运行日志信息输出方式,增加了滚动输出的方式,初始只有控制台输出

65 ZOO_LOG4J_PROP="INFO,CONSOLE,ROLLINGFILE"

66 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.out 文件中,和运行日志放置在同一文件夹中。当需要查看脚本命令错误时,可以查看 zookeeper.out 文件,当需要查看程序错误时就查看 zookeeper.log 运行日志文件

e79b265a9e84a656a30c6d8b150c9339.png

068be7e19a8fd7ea1cc73db7ddbb42c1.png

TomAndersen

发布了22 篇原创文章 · 获赞 6 · 访问量 1万+

私信

关注

标签:运行日志,输出,Zookeeper,log,zookeeper,ZOO,out

来源: https://blog.csdn.net/TomAndersen/article/details/104405017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值