Подтвердить что ты не робот

Почему zookeeper не использует мой журнал журналов log4j.properties

В моем файле zookeeper/conf/log4j.properties я установил zookeeper.log.dir в $HOME/zklogs

Когда я использую zkServer.sh, он не использует этот каталог. Вместо этого он использует ${ZOO_LOG_DIR}, который, когда я его эхо, выхожу на "."

Я не понимаю, как исправить эту проблему, я не вижу, что ${ZOO_LOG_DIR} установлен где угодно. Я не уверен, как он настроен на "." вообще. Я также не знаю, как запустить zookeeper без zkServer.sh. Я тоже noobish в linux и немного потерял по этому вопросу...

Кто-нибудь знает, как я могу исправить эту проблему, чтобы она использовала каталог, установленный в моем файле log4j.properties в каталоге conf?

*** UPDATE, я нашел в zkEnv.sh в каталоге bin моей установки zookeeper. Есть код:

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

Я не уверен, что происходит в этой первой строке, но он должен быть здесь, что что-то идет не так. Я ожидаю, что он посмотрит на zookeeper.log.dir из моего файла log4j.properties. Может ли кто-нибудь сказать мне, должно ли это быть правдой? Я не хочу просто прокладывать путь сюда...

4b9b3361

Ответ 1

Я хотел добавить, как я исправил эту проблему/настроил свою среду.

Здесь работают 2 механизма регистрации:

  • bin/zkServer.sh перенаправляет сервер stookout zookeeper и stderr на zookeeper.out
  • log4j может присоединяться к журналам в нескольких местах, включая:
    • CONSOLE - который заканчивается на сервере stookout zookeeper и stderr
    • ROLLINGFILE - который отправляется в zookeeper.log

bin/zkServer.sh использует:

  • ZOO_LOG_DIR, чтобы установить путь как для zookeeper.out, так и для log4j.
  • ZOO_LOG4J_PROP, чтобы установить уровень ведения журнала log4j и какие приложения для журналов включены

"Возможные" значения по умолчанию в настройке conf/log4j.properties устанавливаются комбинацией zookeeper bash scripts:

  • ZOO_LOG_DIR =. (рабочий каталог, из которого запускается zookeeper)
    • установить внутри conf/log4j.properties как zookeeper.log.dir
  • ZOO_LOG4J_PROP = INFO, CONSOLE
    • установить внутри conf/log4j.properties как zookeeper.root.logger

Эффект включения менеджера журналов CONSOLE заключается в том, что журналы теперь идут в stdout. Поскольку bin/zkServer.sh перенаправляет stdout и stderr на zookeeper.out, log4j logs заканчивается в zookeeper.out. Эффект отключения ROLLINGFILE заключается в том, что не создается файл zookeeper.log.

Журнал zookeeper.out не вращается. Журнал zookeeper.log настроен на поворот и может быть установлен для истечения старых журналов.

Я хотел, чтобы журналы были свернуты и истекли. Первое, что я должен был сделать, это изменить conf/log4j.properties, чтобы вызвать истечение/удаление старых журналов. Я сделал это, установив log4j.appender.ROLLINGFILE.MaxBackupIndex внутри conf/log4j.properties. Второе, что мне нужно было сделать, это установить каталог журнала, уровень ведения журнала и добавление.

У меня есть bash script, который запускается каждую минуту. Если он видит, что 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 logs теперь больше не заканчивается в zookeeper.out. Эффект включения ROLLINGFILE заключается в том, что файл zookeeper.log создается, вращается и истек.

BTW, conf/log4j.properties, по-видимому, уже находится в моем классе. Я не должен был делать никаких изменений в этом отношении.

Эта цепочка значительно способствовала моему пониманию: https://groups.google.com/forum/#!msg/nosql-databases/aebIvNnT0xY/doky1X9-WfwJ

Ответ 2

zkServer.sh получает переменные среды из zkEnv.sh Файл env устанавливает путь к классу, который включает файл log4j, если он находится в ожидаемом месте.

ZOOXFGDIR=ZOOBINDIR/../conf

Я отбросил некоторые эхо в zkServer.sh, чтобы проследить, что происходит. Я обнаружил, что classpath был установлен правильно, но logdir и log4j_prop не были установлены. Поэтому я добавил их в zkEnv.sh. В настоящее время появляются журналы в ожидаемом месте.

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

Ответ 3

Насколько я могу видеть из zkEnv.sh каталог zookeeper/conf уже находится в пути к классам. Там есть две проблемы:

  • zkServer.sh добавляет "-Dzookeeper.log.dir =." к команде запуска ZK, если вы не указали переменную среды ZOO_LOG_DIR
  • даже если вы укажете 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

а также передал среду ZOO_LOG_DIR для ZK, потому что zkServer.sh генерирует аргумент VM-Dzookeeper.log.dir при запуске ZK. Вот команда, которая запускает ZooKeeper для меня, заставляет ее читать /opt/zookeeper/conf/log 4j.properties и хранить файлы журнала в /opt/zimbra/log:

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

Ответ 4

Я считаю, что ответ на мой вопрос заключается в том, что мне нужно переместить этот файл log4j.properties в мой путь к классу, а затем и только тогда будет zkEnv.sh читать значения, которые я установил в log4j.properties, когда я вызываю zkServer.sh, Я считаю, что просто не понял, как правильно использовать log4j.

Ответ 5

Другой вариант изменить каталог журнала файлов с помощью переменной среды 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_PREFIX по zookeeper dist, который я aliase с $ZOO_HOME и использую его для переменной среды ZOO_LOG_DIR.

В конце этого сообщения я намотал информацию об отлаживании сценариев bash - помогает мне исследовать, какие среды или локальные переменные плюс значения используются.

Как я вижу, файл /home/joma/dev/programme/zk -local-ensemble/zk-server-1/bin/../conf находится в CLASSPATH, поэтому файл log4j.properties имеет право для загрузки ресурсов через java class-loader для рамки 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