Dlaczego zookeeper nie używa mojego katalogu log4j.properties

W moim pliku zookeeper/conf/log4j.properties ustawiłem zookeeper.log.dir to $HOME / zklogs

Kiedy używam zkServer.sh nie używa tego katalogu. Zamiast tego używa ${ZOO_LOG_DIR}, które kiedy echo to, wychodzi na "."

Nie rozumiem jak rozwiązać ten problem, nie widzę ${ZOO_LOG_DIR} ustawionego nigdzie. Nie jestem pewien, jak to się ustawia "."w ogóle. Nie wiem też jak uruchomić zookeeper bez zkServer.sh. ja też jestem noobishem w Linuksie i trochę się pogubiłem w tym problem...

Czy ktoś wie, jak mogę rozwiązać ten problem, aby używał katalogu ustawionego w moim pliku log4j. properties w katalogu conf?

***UPDATE, znalazłem w zkEnv.sh w katalogu bin mojej instalacji zookeeper. Istnieje kod:

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

Nie jestem pewien, co się dzieje w pierwszej linii, ale to musi być tutaj, że coś idzie nie tak. Spodziewam się, że spojrzy na dozorcę Zoo.log.katalog z mojego pliku log4j. properties. Czy ktoś może mi powiedzieć, czy to prawda? Nie wiem. chcę po prostu utwardzić ścieżkę tutaj...

Author: smuggledPancakes, 2014-10-28

6 answers

Chciałem dodać, jak naprawiłem ten problem / dostosowałem moje środowisko.

Działają tu 2 mechanizmy logowania:

  • bin/zkServer.sh przekierowuje stdout i stderr serwera zookeeper do zookeeper.out
  • log4j może dołączać do logów w kilku miejscach, w tym:
    • konsola-która kończy się na stdout i stderr serwera zookeeper
    • ROLLINGFILE-który jest wysyłany do zookeeper.log

Bin/zkServer.sh zastosowania :

  • ZOO_LOG_DIR aby ustawić ścieżkę dla obu zookeeper.out i log4j.
  • ZOO_LOG4J_PROP aby ustawić poziom logowania log4j i jakie aplikacje dziennika są włączone

Domyślne ustawienia w konfiguracji conf / log4j. właściwości są ustawiane przez kombinację skryptów bash zookeeper:

  • ZOO_LOG_DIR = . (katalog roboczy, z którego uruchamiany jest zookeeper )
    • Ustaw wewnątrz conf / log4j.properties jako zookeeper.log.dir
  • ZOO_LOG4J_PROP = INFO, KONSOLA
    • Ustaw wewnątrz conf / log4j.properties jako zookeeper.root.logger

Efekt włączenia konsoli log appender jest taki, że logi przechodzą teraz na stdout. Ponieważ bin/zkServer.sh przekierowuje stdout i stderr do zookeeper.out, log4j logs kończy się w zookeeper.Wynocha. Efektem wyłączenia ROLLINGFILE jest brak zookeepera.tworzony jest plik dziennika.

Zookeeper.out log nie jest obrócony. Dozorca Zoo.log log jest ustawiony na obracanie i może być ustawione na wygaszenie starych logów.

Chciałem, aby logi się zwijały i były wygasłe. Pierwszą rzeczą, którą musiałem zrobić, to zmienić conf / log4j.properties, aby spowodować wygaśnięcie / usunięcie starych dzienników. Zrobiłem to ustawiając log4j. appender.ROLLINGFILE.MaxBackupIndex wewnątrz conf / log4j.properties. Drugą rzeczą, którą musiałem zrobić, to ustawić katalog dziennika, poziom logowania i appendery.

Mam skrypt bash, który działa co minutę. Jeśli zobaczy, że zookeeper nie biega, to biega :

bin/zkServer.sh start

Zmieniłem go, aby określić zmienne środowiskowe oczekiwane przez 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

Efektem wyłączenia konsoli log appender jest to, że dzienniki log4j nie trafiają już do zookeeper.Wynocha. Efektem włączania ROLLINGFILE jest to, że zookeeper.plik dziennika jest tworzony, obracany i wygasł.

BTW, conf / log4j. properties było podobno już w mojej classpath. Nie musiałem wprowadzać żadnych zmian w tym zakresie.

[[2]}ten łańcuch znacząco przyczynił się do mojego zrozumienie: https://groups.google.com/forum/#! msg / nosql-databases/aebIvNnT0xY/doky1X9-wfwj
 36
Author: Jeff Maass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-03 16:34:58

zkServer.sh pobiera zmienne środowiskowe z zkEnv.sh Plik env ustawia ścieżkę klasową, która zawiera plik log4j, jeśli znajduje się w oczekiwanej lokalizacji.

ZOOXFGDIR=ZOOBINDIR/../conf

Wrzuciłem trochę echa do zkServer.sh żeby namierzyć, co się dzieje. Zauważyłem, że classpath jest ustawiany poprawnie, ale logdir i log4j_prop nie były ustawiane. Więc dodałem je do zkEnv.sh. Logi pojawiają się teraz w oczekiwanej lokalizacji.

ZOO_LOG_DIR="/var/log/zookeeper"
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
 6
Author: jorfus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-10 22:24:38

Z tego co widzę od zkEnv.sh folder zookeeper / conf jest już w classpath. Są tam dwa problemy:

  1. zkServer.sh dodaje " - Dzookeeper.log.dir=."do polecenia ZK launch, chyba że podasz zmienną środowiskową ZOO_LOG_DIR
  2. Nawet jeśli podasz ZOO_LOG_DIR, ZK może nadal nie być w stanie znaleźć Twojego pliku log4j.properties, ponieważ zkEnv.sh określa CLASSPATH w następujący sposób:

    $CLASSPATH="$ZOOCFGDIR:$CLASSPATH"

To działa dobrze, jeśli twoja $ CLASSPATH zmienna środowiskowa nie jest pusta, jednak gdy jest pusta, po prostu pozostawia po sobie dwukropek, który psuje twoją ścieżkę klasową. Zmieniłem powyższe linie na to:

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

A także przeszedł środowisko ZOO_LOG_DIR dla ZK, ponieważ zkServer.sh generuje-Dzookeeper.log.argument dir VM podczas uruchamiania ZK. Oto polecenie, które uruchamia ZooKeeper dla mnie, sprawia, że odczytuje /opt / zookeeper / conf / log4j. properties i przechowuje pliki dziennika w /opt/zimbra/log:

ZOO_LOG_DIR=/opt/zimbra/log /opt/zookeeper/bin/zkServer.sh start
 2
Author: Greg S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-12 05:33:05

Uważam, że odpowiedź na moje pytanie jest taka, że muszę przenieść ten plik log4j. properties do mojej classpath i wtedy i tylko wtedy zkEnv.sh odczyt wartości, które ustawiłem w log4j. properties podczas wywoływania zkServer.sh. wierzę, że po prostu nie rozumiem, jak prawidłowo używać log4j.

 1
Author: smuggledPancakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 16:04:11

Inną opcją zmiany katalogu dziennika za pomocą zmiennej środowiskowej ZOO_LOG_DIR jest utworzenie własnego zk-server-1/conf/zookeeper-env.sh.

Reading the zookeeper - 3.4.6 dist Bash scripts (t. i. zkEnv.sh), są źródłem, że zookeeper-env.sh plik, jeśli istnieje. Oto moja (stworzona) treść:

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

Jestem przyzwyczajony do zmiennej PRODUCTNAME _HOME, która wskazuje na górny katalog instalacyjny zookeeper. Ten top dir wydaje się być nazwany $ZOOKEEPER_PREFIX przez Zookeeper dist, który aliasuję z $ZOO_HOME i używam go dla zmiennej środowiskowej ZOO_LOG_DIR.

Pod koniec tego postu wyjąłem informacje o debug skryptów bash-pomaga mi zbadać, które środowisko lub lokalne zmienne plus wartości są używane.

Jak widzę, / home / joma / dev / program/ZK-local-ensemble/ZK-server-1/bin/..katalog / conf znajduje się na ścieżce CLASSPATH, stąd plik log4j. properties jest uprawniony do ładowania zasobów przez Java class-loader dla frameworka log4j(który jest sposobem implementacji 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
Author: Joerg M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 22:53:55

Może nie szukana odpowiedź, ale dla zookeeper-3.4.11 w katalogu conf można ustawić odpowiednie poziomy i konfigurację w pliku log4j. properties

 0
Author: Antoni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-28 08:42:06