原文:
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默认生成的日志文件和目录配置:
1、修改log4j.properties
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.DailyRollingFileAppender
2、修改zkEnv.sh
zkEnv.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 &