原文:
1.http://www.voidcn.com/blog/xyang81/article/p-6258996.html
2.http://www.cnblogs.com/zhwbqd/p/3957018.html
Zookeeper在启动的时候,默认会在当前运行zkServer.sh命令的目录生成一个zookeeper.out日志文件,从日志中可以看到客户端的连接请求、发送的命令等信息,虽然从这个文件中也能查看日志,但不利于管理和维护。默认生成的日志文件如下图所示:
本文Zookeeper安装在/opt/zookeeper-3.4.9目录下,下面修改zk默认生成的日志文件和目录配置:
log4j.properties日志配置文件在/opt/zookeeper-3.4.9/conf目录下
shell> cd /opt/zookeeper-3.4.9/conf shell> vim log4j.properties ## 将以下配置: zookeeper.root.logger=INFO, CONSOLE log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender ## 修改为: zookeeper.root.logger=INFO, ROLLINGFILE log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppenderzkEnv.sh日志配置文件在/opt/zookeeper-3.4.9/bin目录下
shell> cd /opt/zookeeper-3.4.9/bin shell> vim zkEnv.sh ## 将以下配置: if [ "x${ZOO_LOG_DIR}" = "x" ] then ZOO_LOG_DIR="." fi if [ "x${ZOO_LOG4J_PROP}" = "x" ] then ZOO_LOG4J_PROP="INFO,CONSOLE" fi ## 修改为: if [ "x${ZOO_LOG_DIR}" = "x" ] then ZOO_LOG_DIR="/var/log/zookeeper" fi if [ "x${ZOO_LOG4J_PROP}" = "x" ] then ZOO_LOG4J_PROP="INFO,ROLLINGFILE" fi修改ZOO_LOG_DIR和ZOO_LOG4J_PROP的值,启动服务后,zk会将日志文件保存到/var/log/zookeeper目录下,并且文件名为log4j.properties文件中配置的zookeeper.log,如下图所示:
3. 美中不足的是在你设定的目录中, 仍会有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 &