当前位置: 首页 > 面试题库 >

Zookeeper为什么不使用我的log4j.properties文件日志目录

赵智
2023-03-14
问题内容

在我的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将zookeeperhtml" target="_blank">服务器的stdout和stderr重定向到zookeeper.out
  • log4j可以将日志追加到多个位置,包括:
    • 控制台-最终出现在zookeeper服务器的stdout和stderr中
    • ROLLINGFILE-发送到zookeeper.log

bin / zkServer.sh使用:

  • ZOO_LOG_DIR设置zookeeper.out和log4j的路径。
  • ZOO_LOG4J_PROP设置log4j日志记录级别以及打开了哪些日志附加程序

设置conf / log4j.properties中的“最终”默认值由Zookeeper bash脚本的组合设置:

  • ZOO_LOG_DIR =。(启动zookeeper的工作目录)
    • 在conf / log4j.properties内部设置为zookeeper.log.dir
  • ZOO_LOG4J_PROP =信息,控制台
    • 在conf / log4j.properties内部设置为zookeeper.root.logger

打开日志附加器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



 类似资料:
  • 我使用Log4J来记录应用程序运行时进程。这是我的log4j。属性文件: 我已经在Tomcat上部署了应用程序,并调用了一些它的方法来获取日志消息。在这些操作之后,在${CATALINA_HOME}/logs文件夹中,我得到了一些. log文件: 卡塔琳娜。2017-02-12.日志(没有我的应用信息) 在我的应用程序中,我得到的记录器为: 我还尝试用INFO和ERROR级别记录消息。 结果,我得

  • 我的任务是升级一个大型服务类型的java程序(不是我写的,第一次接触它),它有大量的开源库。我正在升级到log4j2,它以前有log4j,但我不知道它是否工作正常。 我根本拿不到日志文件。这是在使用NetBeans 8的本地开发环境中。我的类路径中有log4j-api和log4j-core2.9.0文件。我在项目根目录中的log4j2.xml文件是: 类日志变量是(是的,类名是Main,它扩展了一

  • 我有一个简单的脚本,每2秒打印一次hello。 我有一个超简单的docker文件运行这个脚本。 首先我建立docker映像: 现在,我使用选项运行它,它按预期工作。 但是当我以分离模式运行它,然后尝试查看日志时,我什么也看不到。

  • 问题内容: 我正在尝试打开一个保存在源文件夹本身中的CSV文件名“ logger.csv”。 但是,这一直在给我一个“找不到文件”错误。 问题答案: 如果您现在就使用相对路径,则该文件需要存在于项目根目录中, 而不是 存在于java文件的目录中。 考虑以下层次结构: 不管用。 将 现在 的工作。(注意,该文件与src目录相邻。)

  • 问题内容: 我在查找日志文件时遇到问题。 我在Windows XP的Eclipse 3.7.1中使用Java日志记录- 。我文件的相关行是: 据我所知,执行以下两行之后: 我的日志文件应该在哪里是整数。 我在该目录中有5个不同的文件,通过,但是它们都没有包含我的日志记录,甚至没有包含今天日期的记录。我进行了一些谷歌搜索,发现“ 跟踪和日志记录”表示我的日志应位于其他位置。那里有一个名为的文件,但实

  • 我在我的项目中使用log4j2,如下所示: 我的配置文件如下所示: 它创建了我的文件,我在其中记录了一些东西,但它仍然是空的。当我试图删除这个文件时,操作系统告诉我它正在使用中(若应用程序正在工作),但即使我停止应用程序,文件仍然是空的。 那么,我应该更改哪些设置以使其正常工作?