web-dev-qa-db-ja.com

zookeeperがlog4j.propertiesファイルのログディレクトリを使用しないのはなぜですか

私の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を見ることを期待しています。それが本当かどうか誰にも教えてもらえますか?ここにパスを単に配線したくありません...

25

この問題の修正方法を追加したい/環境をカスタマイズしたい.

ここで機能する2つのロギングメカニズムがあります。

  • bin/zkServer.shは、zookeeperサーバーのstdoutおよびstderrをzookeeper.outにリダイレクトします
  • log4jは、ログに次のようないくつかの場所に追加できます。
    • コンソール-zookeeperサーバーのstdoutとstderrになります
    • ROLLINGFILE-zookeeper.logに送信されます

bin/zkServer.shは以下を使用します。

  • Zookeeper.outとlog4jの両方のパスを設定するZoo_LOG_DIR。
  • Zoo_LOG4J_PROPを使用して、log4jのログレベルとオンにするログアペンダーを設定します。

セットアップconf/log4j.propertiesの「最終的な」デフォルトは、zookeeper bashスクリプトの組み合わせによって設定されます。

  • Zoo_LOG_DIR =。 (zookeeperの起動元の作業ディレクトリ)
    • conf/log4j.properties内にzookeeper.log.dirとして設定します
  • Zoo_LOG4J_PROP = INFO、コンソール
    • conf/log4j.properties内にzookeeper.root.loggerとして設定します

ログアペンダーCONSOLEをオンにすると、ログは標準出力になります。 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を設定することでそれを行いました。 2つ目は、ログディレクトリ、ログレベル、およびアペンダーを設定することでした。

毎分実行される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

40
Jeff Maass

zkServer.shは、zkEnv.shから環境変数を取得します。envファイルは、log4jファイルが予想される場所にある場合、log4jファイルを含むクラスパスを設定します。

ZOOXFGDIR=ZOOBINDIR/../conf

何が起こっているのかを追跡するために、zkServer.shにいくつかのエコーを落としました。クラスパスが適切に設定されていることがわかりましたが、logdirとlog4j_propは設定されていません。そこで、それらをzkEnv.shに追加しました。現在、ログは予想される場所に表示されているようです。

Zoo_LOG_DIR="/var/log/zookeeper"
Zoo_LOG4J_PROP="INFO,ROLLINGFILE"
7
jorfus

ZkEnv.shからわかる限り、zookeeper/confフォルダーは既にクラスパスにあります。そこには2つの問題があります。

  1. zkServer.shは「-Dzookeeper.log.dir =。」を追加しますZoo_LOG_DIR環境変数を指定しない限り、ZK起動コマンドに
  2. zoo_LOG_DIRを指定しても、zkEnv.shは次のようにCLASSPATHを指定するため、ZKはlog4j.propertiesファイルを見つけることができない場合があります。

    $CLASSPATH="$ZOOCFGDIR:$CLASSPATH"

これは、$ CLASSPATH環境変数が空でない場合は正常に機能しますが、空の場合は、末尾のコロンが残るだけで、クラスパスが台無しになります。上記の行をこれに変更しました:

#add the zoocfg dir to classpath
if [ "x${CLASSPATH}" = "x" ]
then
    CLASSPATH="$ZOOCFGDIR"
else
    CLASSPATH="$ZOOCFGDIR:$CLASSPATH"
fi

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
2
Greg S

私の質問に対する答えは、そのlog4j.propertiesファイルをクラスパスに移動する必要があり、それからzkEnv.shがzkServer.shを呼び出すときにlog4j.propertiesで設定した値を読み込むことだと思います。 log4jを適切に使用する方法を理解できなかったと思います。

1

Zoo_LOG_DIR環境変数を介してファイルログディレクトリを変更する別のオプションは、独自のzk-server-1/conf/zookeeper-env.shを作成することです。

Zookeeper-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変数を持つことに慣れています。この変数は、zookeeperの最上位のインストールディレクトリを指します。この最上位ディレクトリは、zookeeper distによって$ ZOOKEEPER_PREFIXという名前が付けられているようです。

この投稿の最後に、bashスクリプトのデバッグ情報をスプールしました-どの環境またはローカル変数と値が使用されているかを調べるのに役立ちます。

私が見るように、/ home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin /../ conf dirはCLASSPATH上にあるため、log4j.propertiesファイルはリソースのロードに適格ですlog4jフレームワーク用のJavaのクラスローダーを介して(これはlog4jがAFAIRを実装する方法です)。

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
1
Joerg M.

求められている答えではないかもしれませんが、confディレクトリのzookeeper-3.4.11では、log4j.propertiesファイルで適切なレベルと構成を設定できます

0
Antoni