2014-10-28 25 views
20

在我的飼養員/ conf目錄/ log4j.properties文件我的zookeeper.log.dir設置爲$ HOME/zklogs爲什麼飼養員不能用我log4j.properties文件日誌目錄

當我使用zkServer.sh它不使用該目錄。相反,它使用$ {ZOO_LOG_DIR},當我回應它時,出現在「」。

我不明白如何解決這個問題,我沒有看到$ {ZOO_LOG_DIR}設置在任何地方。我不確定它是如何設置的。「在所有。我也不知道如何在沒有zkServer.sh的情況下啓動zookeeper。我也不太懂linux,也有點在這個問題上丟失...

有沒有人知道我該如何解決這個問題,以便它使用conf目錄下我的log4j.properties文件中設置的目錄?

*** UPDATE,我在zkEnv.sh中找到了zookeeper安裝的bin目錄。有代碼:

if["x${ZOO_LOG_DIR}" = "x" ] 
then 
    ZOO_LOG_DIR="." 
fi 

我不知道在第一行發生了什麼,但它必須在這裏出現問題。我期望它從我的log4j.properties文件中查看zookeeper.log.dir。有人可以告訴我,如果這是真的?我不想只在這裏硬連線...

回答

33

我想補充我是如何解決這個問題/定製我的環境。

有2個日誌機制在這裏工作:

  • 斌/ zkServer.sh重定向動物園管理員服務器的輸出和錯誤到動物園管理員。出
  • log4j的可追加到日誌幾個地方包括:
    • CONSOLE - 這在動物園管理員服務器的輸出和錯誤
    • ROLLINGFILE結束了 - 這被送到zookeeper.log

bin/zkServer.sh使用:

  • ZOO_LOG_DIR設置zookeeper.out和log4j的路徑。
  • ZOO_LOG4J_PROP設置log4j的日誌記錄級別,什麼日誌追加程序被打開

在設置conf下的「最終」默認/ log4j.properties被動物園管理員的bash腳本的組合設置:

  • ZOO_LOG_DIR =。 (工作目錄從中動物園管理員開始)
    • 組CONF的內部/ log4j.properties作爲zookeeper.log.dir
  • ZOO_LOG4J_PROP = INFO,CONSOLE
    • CONF/log4j的內部設置。性能zookeeper.root.logger

打開日誌附加器控制檯的效果是,日誌現在去到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來實現這一點。我不得不做的第二件事是設置日誌目錄,日誌級別和appender。

我有一個bash腳本,每分鐘運行一次。如果它看到飼養員沒有運行,它運行:

bin/zkServer.sh start 

我改成了指定由斌/ 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 

關閉日誌附加器控制檯的效果是,log4j的日誌現在已不再在zookeeper.out結束。打開ROLLINGFILE的效果是zookeeper.log文件被創建,旋轉和過期。

順便說一句,conf/log4j.properties顯然已經在我的類路徑中。我不得不在這方面不做任何改變。

這個鏈顯著貢獻我的理解: https://groups.google.com/forum/#!msg/nosql-databases/aebIvNnT0xY/doky1X9-WfwJ

+0

另見HTTPS適當的級別和配置://issues.apache .org/jira/browse/ZOOKEEPER-1983 – 2015-08-10 21:19:15

1

我相信我的問題的答案是,我需要將該log4j.properties文件移動到我的類路徑中,然後纔將zkEnv.sh讀取我在調用zkServer.sh時在log4j.properties中設置的值。我相信我只是不明白如何正確使用log4j。

2

據我所知,zkEnv.sh zookeeper/conf文件夾已經在類路徑中。有兩個問題:

  1. zkServer.sh添加「-Dzookeeper.log.dir =。」。到ZK啓動命令,除非你指定ZOO_LOG_DIR環境變量
  2. 即使你指定ZOO_LOG_DIR,ZK可能仍然無法找到你的log4j.properties文件,因爲zkEnv.sh指定CLASSPATH這樣的:

    $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公司/日誌:

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

另一種選擇通過ZOO_LOG_DIR環境變量來更改文件日誌目錄創建自己的ZK-服務器-1/conf目錄/ zookeeper-env.sh。

讀動物園管理員-3.4.6 DIST的bash腳本(t.i。zkEnv.sh),它們來源,如果它存在zookeeper-env.sh文件。下面是它的(我創建的)內容:

export ZOO_HOME=$ZOOKEEPER_PREFIX 
echo $ZOO_HOME 
export ZOO_LOG_DIR=$ZOO_HOME/logs 

我習慣了有PRODUCTNAME _HOME變量,它指向的動物園管理員的頂部安裝目錄。這頂目錄似乎是由飼養員DIST,我aliase與$ ZOO_HOME UND使用它的ZOO_LOG_DIR環境變量命名爲$ ZOOKEEPER_PREFIX。

在這個職位,我後臺走出的bash腳本調試信息的結束 - 幫我調查哪些環境或局部變量加的數值。

正如我所看到的,/ home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf目錄位於CLASSPATH上,因此log4j.properties文件是有資格通過java的類加載器爲log4j框架加載資源(這是log4j實現AFAIR的方式)。

[email protected]:~/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 
+0

順便說一句,作爲軟件的用戶和開發者,我完全陷入了'wahtthebliepisgoingonhereshowmethelogs'。 zookeeper應該將他們的bash err/sysout放到boot.log中,直到log4j開始運行。準備標準的log4j.properties將err/sysout重定向到文件appender。 – 2015-05-13 23:06:05

+0

BTW2,並將標準log4j.properties文件appender添加到附加模式! – 2015-05-13 23:18:38

4

zkServer.sh得到它的環境變量從zkEnv.sh 的ENV文件設置類路徑,其中包括log4j的文件,如果它是在預期的位置。

ZOOXFGDIR=ZOOBINDIR/../conf

我放棄了一些回聲到zkServer.sh追查這是怎麼回事。 我發現類路徑設置正確,但沒有設置logdir和log4j_prop。所以我將它們添加到zkEnv.sh。日誌似乎現在顯示在預期位置。

ZOO_LOG_DIR="/var/log/zookeeper" 
ZOO_LOG4J_PROP="INFO,ROLLINGFILE" 
+0

簡潔明瞭! – 2017-03-16 07:17:37

0

也許不是尋求答案,但動物園管理員-3.4.11 conf目錄,你可以設置文件log4j.properties

相關問題