Как отключить/отключить функцию ведения журнала от Storm
Я хочу отключить функцию ведения журнала, предлагаемую по умолчанию при запуске из локального кластера.
В настоящее время он записывает столько информации на консоль.
Ниже приведен пример журнала:
261 [main] INFO backtype.storm.daemon.task - Shut down task Getting-Started-Toplogie-1-1376388324:2
2261 [main] INFO backtype.storm.daemon.task - Shutting down task Getting-Started-Toplogie-1-1376388324:1
2262 [Thread-24] INFO backtype.storm.util - Async loop interrupted!
2276 [main] INFO backtype.storm.daemon.task - Shut down task Getting-Started-Toplogie-1-1376388324:1
2278 [main] INFO backtype.storm.daemon.worker - Terminating zmq context
2279 [main] INFO backtype.storm.daemon.worker - Disconnecting from storm cluster state context
2279 [main] INFO backtype.storm.daemon.worker - Waiting for heartbeat thread to die
2279 [Thread-27] INFO backtype.storm.util - Async loop interrupted!
2308 [main] INFO backtype.storm.testing - Shutting down in process zookeeper
2309 [main] INFO backtype.storm.testing - Done shutting down in process zookeeper
2309 [main] INFO backtype.storm.testing - Deleting temporary path /tmp/255fe7c8-1407-4f43-8771-2217905232ab
После прохождения многих документов я получил код ниже, я могу отключить ведение журнала из класса.
static Logger logger = Logger.getLogger(TopologyMain.class);
public static void main(String[] args) throws InterruptedException, AlreadyAliveException, InvalidTopologyException {
logger.setLevel((Level) Level.FATAL);
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}
Выход (правильный): 0 [main] FATAL TopologyMain - Here is some FATAL
Но мне нужно изменить конфигурацию ведения журнала storm/zookeper и т.д.
Может ли кто-нибудь помочь в этом?
<ч/" > Обновить. Ниже приведен код, который я пробовал, но он не работает. Я пробовал с версией 0.7.1, 0.8.2 и 0.9.0-wip *
//Configuration
Config conf = new Config();
conf.put(Config.TOPOLOGY_DEBUG, false); //Tried this alone
conf.setDebug(false); //Tried this alone & tried both together as well.. No change :-(
Ответы
Ответ 1
Шторм действительно болтливый и сообщает много информации, но если вы хотите его отключить, вы можете установить Config.TOPOLOGY_DEBUG значение false.
Когда вы устанавливаете Config.TOPOLOGY_DEBUG в true, вы сообщаете Storm регистрировать сообщение каждый раз, когда кортеж испускается из любого носика или болта.
Ответ 2
Добавьте код ниже в log4j.xml. Он просто напечатает ваши запланированные журналы и выходы консоли: -
<logger name="org.apache.zookeeper">
<level value="warn"/>
</logger>
<logger name="backtype.storm">
<level value="warn"/>
</logger>
<logger name="com.netflix">
<level value="warn"/>
</logger>
И используйте в своих классах Logger.getLogger(Class).
Ответ 3
Это работает для меня (штормовая версия 0.9.0.1):
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout(..);
builder.setBolt(..);
:
Config conf = new Config();
conf.put(Config.TOPOLOGY_DEBUG, false);
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("topologyName", conf, builder.createTopology());
Ответ 4
Я нашел этот вопрос при попытке оценить Storm с использованием локальной тестовой среды. Я создал проект в зависимости от storm-core
version 1.1.0
, который является последним стабильным выпуском на момент написания этой статьи, поэтому я не знаю, применимо ли это для кого-либо еще.
Проверяя зависимости Maven и расширяя содержимое storm-core-1.1.0.jar
, выяснилось, что файл конфигурации для логической зависимости log4j библиотеки был вызван log4j2.xml
. С осознанием того, что механизм регистрации был log4j 2, я обратился к документации здесь: https://logging.apache.org/log4j/2.x/manual/index.html Я создал новый log4j2.xml
файл в разделе src/main/resources
(мой проект сконфигурирован Maven, поэтому он находится в корневом каталоге классов). Я начал с копирования содержимого существующего файла и изменения уровней журнала для указанных регистраторов на "ВЫКЛ":
<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="60">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%-4r [%t] %-5p %c{1.} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache.zookeeper" level="OFF"/>
<Root level="OFF">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</configuration>
Запуск примера "hello world", независимо от установки conf.debug()
, указывает на то, что - поскольку теперь нет механизма, с помощью которого ведение журнала должно быть возможно вообще - журналы (наиболее полезно System.out) теперь мертвы, за исключением приглашений System.out.println()
, которые я помещал в свои тестовые носики/болты. Это именно то, что я хотел! Надеюсь, это поможет кому-то, кроме меня!
Ответ 5
Существует хорошая документация по динамическому настройке уровня журнала. Это можно сделать через пользовательский интерфейс, а также с помощью CLI. Позднее мне кажется лучше. После запуска топологии вы можете просто использовать следующую команду (изнутри установочного каталога Storm):
./bin/storm set_log_level [topology name] -l [logger name]=[LEVEL]:[TIMEOUT]
Подробнее см. эта ссылка
Ответ 6
Создайте файл "log4j2.xml" в src/main/resources (проект Maven) работает для меня!
<Loggers>
<Logger name="org.apache.storm" level="OFF"/>
<Logger name="org.apache.zookeeper" level="OFF"/>
<Root level="OFF">
<AppenderRef ref="Console"/>
</Root>
</Loggers>