首页 > 解决方案 > 无法更改 zookeeper 日志文件名

问题描述

Zookeeper 正在创建名为 zookeeper-root-hostname.out 的日志,但这是我的 log4j.properties:

zookeeper.root.logger=INFO, CONSOLE
zookeeper.console.threshold=INFO

zookeeper.log.dir=.
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=INFO
zookeeper.log.maxfilesize=256MB
zookeeper.log.maxbackupindex=20

zookeeper.tracelog.dir=${zookeeper.log.dir}
zookeeper.tracelog.file=zookeeper_trace.log

log4j.rootLogger=${zookeeper.root.logger}

#
# console
# Add "console" to rootlogger above if you want to use this
#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

#
# Add ROLLINGFILE to rootLogger to get log file output
#
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.ROLLINGFILE.MaxFileSize=${zookeeper.log.maxfilesize}
log4j.appender.ROLLINGFILE.MaxBackupIndex=${zookeeper.log.maxbackupindex}
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

如果更改zookeeper.log.file=zookeeper.log文件的属性,则使用相同的名称创建文件,如何更改日志的文件名?

更新

我发现文件 zkServer.sh 设置了变量 ZOO_LOG_FILE 并覆盖了 log4j.properties 中定义的值:

ZOO_LOG_FILE=zookeeper-$USER-server-$HOSTNAME.log

我可以修改此文件,但可以手动更改吗?

标签: log4japache-zookeeper

解决方案


在典型的 Java 应用程序方式中,Zookeeper 的日志记录情况非常复杂、自定义且文档很少。官方的管理员手册日志部分是一个很小的段落,信息几乎为零,但建议您可以依靠您对第三方库 log4j 的现有知识,该第三方库配置为通过其他第三方库 SLF4J 进行代理。这实际上不会太糟糕,因为这种复杂的安排很常见,因为许多流行的开源项目忽略了 Java 附带的内置日志框架,但稍后您会发现使用 conf 目录中的 log4j.properties 文件实际上并没有'不能按预期工作,因为在提供的启动脚本 (zkServer.sh) 中使用了自定义属性,它覆盖了许多东西。

为了设置文件名,请注意文件 conf/log4j.properties 包含以下变量分配,该变量分配被启动脚本 (zkServer.sh) 覆盖:

zookeeper.log.file=zookeeper.log

在外部设置环境变量,修改启动脚本或更新 log4j.properties 以不使用该变量:

#log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.ROLLINGFILE.File=/the/actual/path/goes/here.log

您可能还想像这样启用 ROLLINGFILE:

#log4j.rootLogger=${zookeeper.root.logger}
log4j.rootLogger=INFO,ROLLINGFILE

推荐阅读