Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么zookeeper不使用我的log4j.properties文件日志目录_Linux_Apache_Log4j_Environment Variables_Apache Zookeeper - Fatal编程技术网

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

Linux 为什么zookeeper不使用我的log4j.properties文件日志目录,linux,apache,log4j,environment-variables,apache-zookeeper,Linux,Apache,Log4j,Environment Variables,Apache Zookeeper,在zookeeper/conf/log4j.properties文件中,我将zookeeper.log.dir设置为$HOME/zklogs 当我使用zkServer.sh时,它不使用该目录。相反,它使用${ZOO\u LOG\u DIR},当我回显它时,它会显示为“.” 我不知道如何解决这个问题,我没有看到${ZOO\u LOG\u DIR}设置在任何地方。我根本不知道它是如何被设置为“.”。我也不知道在没有zkServer.sh的情况下如何启动zookeeper。我对linux也不了解,在这

在zookeeper/conf/log4j.properties文件中,我将zookeeper.log.dir设置为$HOME/zklogs

当我使用zkServer.sh时,它不使用该目录。相反,它使用${ZOO\u LOG\u DIR},当我回显它时,它会显示为“.”

我不知道如何解决这个问题,我没有看到${ZOO\u LOG\u 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。有人能告诉我这是不是真的吗?我不想在这里硬连接路径…

我相信我的问题的答案是,我需要将log4j.properties文件移动到我的类路径中,然后,只有这样,当我调用zkServer.sh时,zkEnv.sh才会读取我在log4j.properties中设置的值。我相信我只是不理解如何正确使用log4j。

从zkEnv.sh zookeeper/conf文件夹中可以看到,它已经在类路径中了。这里有两个问题:

  • zkServer.sh将“-Dzookeeper.log.dir=”添加到ZK启动命令中,除非您指定了ZOO_log_dir环境变量
  • 即使指定了ZOO_LOG_DIR,ZK也可能无法找到log4j.properties文件,因为zkEnv.sh指定的类路径如下:

    $CLASSPATH=“$ZOOCFGDIR:$CLASSPATH”

  • 如果$CLASSPATH环境变量不是空的,那么这很好,但是当它为空时,只会留下一个尾随冒号,这会破坏类路径。 我将上面的行更改为:

    #add the zoocfg dir to classpath
    if [ "x${CLASSPATH}" = "x" ]
    then
        CLASSPATH="$ZOOCFGDIR"
    else
        CLASSPATH="$ZOOCFGDIR:$CLASSPATH"
    fi
    
    并且还为ZK传递了ZOO_LOG_DIR环境,因为zkServer.sh在启动ZK时生成-Dzookeeper.LOG.DIR VM参数。下面是为我启动ZooKeeper的命令,使其读取/opt/ZooKeeper/conf/log4j.properties并将日志文件保存在/opt/zimbra/log中:

    ZOO_LOG_DIR=/opt/zimbra/log /opt/zookeeper/bin/zkServer.sh start
    

    我想补充我是如何解决这个问题/定制我的环境的

    这里有两种日志记录机制:

    • bin/zkServer.sh将zookeeper服务器的stdout和stderr重定向到zookeeper.out
    • log4j可以将日志附加到多个位置,包括:
      • 控制台-最终出现在zookeeper服务器的标准输出和标准输出中
      • ROLLINGFILE-发送到zookeeper.log
    bin/zkServer.sh使用:

    • ZOO_LOG_DIR设置zookeeper.out和log4j的路径
    • ZOO_LOG4J_道具,用于设置LOG4J日志记录级别以及打开哪些日志附加器
    setup conf/log4j.properties中的“最终”默认值由zookeeper bash脚本组合设置:

    • 动物园日志目录=。(启动zookeeper的工作目录)
      • 将conf/log4j.properties的内部设置为zookeeper.log.dir
    • ZOO_LOG4J_道具=信息,控制台
      • 将conf/log4j.properties的内部设置为zookeeper.root.logger
    打开LogAppender控制台的效果是日志现在转到标准输出。因为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来实现的。我必须做的第二件事是设置日志目录、日志级别和appender

    我有一个每分钟运行的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
    
    关闭log appender控制台的效果是log4j日志现在不再显示在zookeeper.out中。启用ROLLINGFILE的效果是创建、旋转zookeeper.log文件并使其过期

    顺便说一句,conf/log4j.properties显然已经在我的类路径中了。在这方面我不需要做任何改变

    这条链条大大有助于我理解:

    通过ZOO_log_DIR环境变量更改文件日志目录的另一个选项是创建自己的zk-server-1/conf/zookeeper-env.sh

    阅读zookeeper-3.4.6 dist bash脚本(t.i.zkEnv.sh),他们会找到zookeeper-env.sh文件(如果存在)的来源。以下是它的(我创建的)内容:

    我习惯于使用PRODUCTNAME\U HOME变量,它指向zookeeper的顶部安装目录。这个顶级目录似乎被ZOOKEEPER dist命名为$ZOOKEEPER\u PREFIX,我用$ZOO\u HOME作为别名,并将其用于ZOO\u LOG\u dir环境变量

    在这篇文章的最后,我整理了bash脚本调试信息——帮助我调查使用了哪些环境或局部变量加值

    在我看来,/home/joma/dev/program/zk local emblem/zk-server-1/bin/./conf dir位于类路径上,因此log4j.properties文件可以通过java的log4j框架类加载器进行资源加载(这是log4j的AFAIR实现方式)


    zkServer.sh
    zkEnv.sh
    env文件设置一个类路径,其中包括log4j文件(如果它位于预期位置)

    ZOOXFGDIR=ZOOBINDIR/。/conf

    我在zkServer.sh中放了一些回音来跟踪发生了什么。 我发现classpath正在运行
    export ZOO_HOME=$ZOOKEEPER_PREFIX
    echo $ZOO_HOME
    export ZOO_LOG_DIR=$ZOO_HOME/logs
    
    joma@kopernikus-u:~/dev/programme/zk-local-ensemble$ bash -x zk-server-1/bin/zkServer.sh start
    + '[' x = x ']'
    + JMXLOCALONLY=false
    + '[' x = x ']'
    + echo 'JMX enabled by default'
    JMX enabled by default
    + ZOOMAIN='-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain'
    + ZOOBIN=zk-server-1/bin/zkServer.sh
    ++ dirname zk-server-1/bin/zkServer.sh
    + ZOOBIN=zk-server-1/bin
    ++ cd zk-server-1/bin
    ++ pwd
    + ZOOBINDIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin
    + '[' -e zk-server-1/bin/../libexec/zkEnv.sh ']'
    + . /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/zkEnv.sh
    ++ ZOOBINDIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin
    ++ ZOOKEEPER_PREFIX=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
    ++ '[' x = x ']'
    ++ '[' -e /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf ']'
    ++ ZOOCFGDIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf
    ++ '[' -f /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zookeeper-env.sh ']'
    ++ . /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zookeeper-env.sh
    +++ export ZOO_HOME=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
    +++ ZOO_HOME=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
    +++ echo /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
    /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
    +++ export ZOO_LOG_DIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs
    +++ ZOO_LOG_DIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs
    ++ '[' x = x ']'
    ++ ZOOCFG=zoo.cfg
    ++ ZOOCFG=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
    ++ '[' -f /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/java.env ']'
    ++ '[' x/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs = x ']'
    ++ '[' x = x ']'
    ++ ZOO_LOG4J_PROP=INFO,CONSOLE
    ++ '[' /home/joma/entwicklung/programme/jdk1.7.0_51 '!=' '' ']'
    ++ JAVA=/home/joma/entwicklung/programme/jdk1.7.0_51/bin/java
    ++ CLASSPATH=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:
    ++ for i in '"$ZOOBINDIR"/../src/java/lib/*.jar'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ '[' -e '/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../share/zookeeper/zookeeper-*.jar' ']'
    ++ for i in '"$ZOOBINDIR"/../zookeeper-*.jar'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ LIBPATH=("${ZOOBINDIR}"/../lib/*.jar)
    ++ for i in '"${LIBPATH[@]}"'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ for i in '"${LIBPATH[@]}"'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ for i in '"${LIBPATH[@]}"'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ for i in '"${LIBPATH[@]}"'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ for i in '"${LIBPATH[@]}"'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ for d in '"$ZOOBINDIR"/../build/lib/*.jar'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/classes:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
    ++ case "`uname`" in
    +++ uname
    ++ cygwin=false
    ++ false
    + '[' x '!=' x ']'
    + '[' x '!=' x ']'
    ++ dirname /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
    + '[' x/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf '!=' x/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf ']'
    + false
    + KILL=kill
    + echo 'Using config: /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg'
    Using config: /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
    + '[' -z '' ']'
    ++ grep '^[[:space:]]*dataDir' /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
    ++ sed -e 's/.*=//'
    + ZOO_DATADIR=/home/joma/dev/programme/zk-local-ensemble/data/zk1
    + '[' '!' -d /home/joma/dev/programme/zk-local-ensemble/data/zk1 ']'
    + ZOOPIDFILE=/home/joma/dev/programme/zk-local-ensemble/data/zk1/zookeeper_server.pid
    + '[' '!' -w /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs ']'
    + _ZOO_DAEMON_OUT=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs/zookeeper.out
    + case $1 in
    + echo -n 'Starting zookeeper ... '
    Starting zookeeper ... + '[' -f /home/joma/dev/programme/zk-local-ensemble/data/zk1/zookeeper_server.pid ']'
    + '[' 0 -eq 0 ']'
    + /bin/echo -n 24744
    + nohup /home/joma/entwicklung/programme/jdk1.7.0_51/bin/java -Dzookeeper.log.dir=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs -Dzookeeper.root.logger=INFO,CONSOLE -cp '/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/classes:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:' -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
    + sleep 1
    + echo STARTED
    STARTED
    
    ZOO_LOG_DIR="/var/log/zookeeper"
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"