log4j - 无法更改 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
我可以修改此文件,但可以手动更改吗?
解决方案
在典型的 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
推荐阅读
- reactjs - 无法添加异步事件处理程序 Office.EventType.RecipientsChanged - Outlook、Office.js、React、TypeScript
- dynamic-programming - 在消息 Microsof 动态导航中显示 SoapUrl?
- laravel - laravel不同的key有很多关系
- android - 从 Android Studio 获取默认 apk 密钥库,以便在其他 PC 上重新编译
- asp.net-web-api - 如何在 Heroku 上为我的 .net 核心 Web API 配置 Postgres
- amazon-web-services - 如何使用 SingleInstance CloudFormation 模板部署 64 位 Windows Server 2016/IIS 10.0
- react-native - 渲染时不出现的按钮
- node.js - 猫鼬和节点 js findOne 和更新查询承诺未在循环中解决
- android - 如何从图库上传多张图片?
- javascript - 我怎样才能从这个元素中获取文本?