Как подавить журналы zookeeper и скопировать только ответ zk на переменную в скрипте bash

#bash #sh #apache-zookeeper

#bash #sh #apache-zookeeper

Вопрос:

Я пытаюсь получить файл, поддерживаемый zookeeper, используя zkcli.sh но каждый раз, когда на консоли выводится сообщение журнала подключения zookeeper, у нас нет привилегий изменять уровень журнала в zookeeper.

Например,

 #!/bin/bash

file=$(zkcli.sh -zkhost ${zkHost} -cmd get /filepath/file.txt)
  

и всякий раз, когда это выполняется, в консоли выводится сообщение журнала.

 INFO  - 2020-07-22 17:30:29.895; org.apache.solr.common.cloud.ConnectionManager; Waiting for client to connect to ZooKeeper
INFO  - 2020-07-22 17:30:29.915; org.apache.solr.common.cloud.ConnectionManager; zkClient has connected
INFO  - 2020-07-22 17:30:29.915; org.apache.solr.common.cloud.ConnectionManager; Client is connected to ZooKeeper
  

Как подавить это сообщение журнала с консоли, а также скопировать file.txt содержимое в file переменную?

Комментарии:

1. file=$(zkcli.sh -zkhost ${zkHost} -cmd get /filepath/file.txt 2>/dev/null)

2. Вы должны установить уровень ведения журнала из конфигурационного файла log4j, чтобы полностью подавить ведение журнала, а затем использовать -Dlog4j.configuration=config при запуске zkCli.sh

Ответ №1:

Хотя вы не можете полностью изолировать содержимое файла без некоторой обработки (из-за инструкций печати в ZooKeeperMain.java как System.out.println("Connecting to " cl.getOption("server")); ), вы можете значительно уменьшить детализацию, используя переменную среды:

ZOO_LOG4J_PROP="ERROR,ROLLINGFILE" bin/zkCli.sh -cmd get /filepath/file.txt

В моей настройке по умолчанию (версия 3.6.2) сообщения журнала записываются в файл под logs/ . Каталог также может быть настроен с ZOO_LOG_DIR . Для более точной настройки также можно изменить conf/log4j.properties .