在我的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使用:
设置conf / log4j.properties中的“最终”默认值由Zookeeper bash脚本的组合设置:
打开日志附加器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