Zookeeper为什么不使用我的log4j.properties文件日志目录
在我的zookeeper / conf / log4j.properties文件中,将zookeeper.log.dir设置为$ HOME / zklogs
当我使用zkServer.sh时,它不使用该目录。而是使用$ {ZOO_LOG_DIR},当我回显它时,它显示为“”。
我不了解如何解决此问题,也看不到任何地方设置的$ {ZOO_LOG_DIR}。我不确定如何将其设置为“。” 完全没有
我也不知道如何在没有zkServer.sh的情况下启动zookeeper。我对Linux也不太满意,在这个问题上有点迷失…
有人知道如何解决此问题,以便它使用在conf目录的log4j.properties文件中设置的目录吗?
***更新,我在zookeeper安装的bin目录中的zkEnv.sh中找到了。有代码:
if["x${ZOO_LOG_DIR}" = "x" ]then
ZOO_LOG_DIR="."
fi
我不确定第一行中发生了什么,但是必须在这里出问题了。我希望它能从我的log4j.properties文件中查看zookeeper.log.dir。谁能告诉我这是否正确?我不想只是硬着头皮在这里…
回答:
我想补充一下如何解决此问题/自定义环境。
这里有2种日志记录机制:
- bin / zkServer.sh将zookeeper服务器的stdout和stderr重定向到zookeeper.out
- log4j可以将日志追加到多个位置,包括:
- 控制台-最终出现在zookeeper服务器的stdout和stderr中
- ROLLINGFILE-发送到zookeeper.log
bin / zkServer.sh使用:
- ZOO_LOG_DIR设置zookeeper.out和log4j的路径。
- ZOO_LOG4J_PROP设置log4j日志记录级别以及打开了哪些日志附加程序
设置conf / log4j.properties中的“最终”默认值由Zookeeper bash脚本的组合设置:
- ZOO_LOG_DIR =。(启动zookeeper的工作目录)
- 在conf / log4j.properties内部设置为zookeeper.log.dir
- ZOO_LOG4J_PROP =信息,控制台
- 在conf / log4j.properties内部设置为zookeeper.root.logger
打开日志附加器CONSOLE的效果是,日志现在转到stdout。由于bin /
zkServer.sh将stdout和stderr重定向到zookeeper.out,因此log4j日志最终存储在zookeeper.out中。关闭ROLLINGFILE的效果是没有创建zookeeper.log文件。
zookeeper.out日志未旋转。zookeeper.log日志设置为轮换,并且 可以 设置为使旧日志过期。
我希望日志滚动并过期。我要做的第一件事是更改conf / log4j.properties以导致旧日志的到期/删除。我通过在conf /
log4j.properties中设置log4j.appender.ROLLINGFILE.MaxBackupIndex做到了这一点。我要做的第二件事是设置日志目录,日志记录级别和附加程序。
我有一个bash脚本,每分钟运行一次。如果发现zookeeper没有运行,则运行:
bin/zkServer.sh start
我更改了它以指定bin / zkServer.sh期望的环境变量。
sudo ZOO_LOG_DIR=/opt/zookeeper-3.4.6/logs ZOO_LOG4J_PROP='INFO,ROLLINGFILE' /opt/zookeeper-3.4.6/bin/zkServer.sh start
关闭日志附加程序CONSOLE的作用是使log4j日志现在不再以zookeeper.out结尾。启用ROLLINGFILE的作用是创建,旋转了zookeeper.log文件并使其过期。
顺便说一句,conf / log4j.properties显然已经在我的类路径中。在这方面,我没有任何改变。
该链条对我的理解做出了重要贡献:https : //groups.google.com/forum/#!msg/nosql-
databases/aebIvNnT0xY/doky1X9-WfwJ
以上是 Zookeeper为什么不使用我的log4j.properties文件日志目录 的全部内容, 来源链接: utcz.com/qa/434049.html