2013-08-13 4 views
14

Я хочу отключить функцию ведения журнала, предлагаемую по умолчанию при запуске из локального кластера. В настоящее время он регистрирует столько информации на консоли.Как отключить/отключить функцию ведения журнала из 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"); 
} 
} 

Output (правильный): 0 [main] FATAL TopologyMain - Here is some FATAL

Но я требую, чтобы изменить протоколирования конфиг штормовой/zookeper, и т.д ..

Может кто-нибудь, пожалуйста, помогите по этому поводу?


Update: Ниже приведен код, который я пытался, но он не работает. Я попытался с версией 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 :-(
+0

Что вы имеете в виду это не работает? – Chiron

+2

Я имею в виду, что я получаю тот же вывод журнала, что и упоминаемый «пример журнала» –

+1

Как вы это решили? Похоже, вы обновили свой вопрос, чтобы выразить неспособность реализовать принятый ответ. –

ответ

11

Шторм действительно болтливый и говорит много информации, но если вы хотите, чтобы заставить замолчать его, вы можете установить Config.TOPOLOGY_DEBUG ложь.

Когда вы устанавливаете Config.TOPOLOGY_DEBUG в true, вы сообщаете Storm, чтобы регистрировать сообщение каждый раз, когда кортеж испускается из любого носика или болта.

+4

Я обнаружил, что шторм включает в себя log4j.properties в пути к классам: есть ли способ его исключить и перезаписать его самостоятельно? Я пробовал разные вещи с помощью плагинов maven, но не повезло. – mox601

+0

Чтобы сделать то, что предлагается здесь, вы можете использовать 'Config :: setDebug (false)' – dantiston

2

Добавить ниже код в log4j.xml.It просто печатать предназначенные журналы и консольные выходы: -

<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 (класс) в классах.

+0

Не работает для меня. – Nav

+0

В идеале это должно сработать .. проверьте, правильна ли ваша конфигурация log4j или нет? – user2435082

+0

Работы сейчас. Оказывается, мне пришлось поместить его в файл 'logback.xml'. Кроме того, 'backtype.storm' устарел. Поэтому они использовались: ' ' – Nav

2

Это работает для меня (шторм версия 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()); 
0

Существует хорошая документация по настройке уровня журнала динамически. Это можно сделать через пользовательский интерфейс, а также с помощью CLI. Позднее мне кажется лучше. После запуска топологии вы можете просто использовать следующую команду (внутри каталога установки Шторма):

./bin/storm set_log_level [topology name] -l [logger name]=[LEVEL]:[TIMEOUT] 

Для получения более подробной информации, пожалуйста, проверьте this link

1

Я нашел этот вопрос при попытке оценить Сторм с помощью локального тестирования Окружающая среда. Я создал проект в зависимости от storm-core версии 1.1.0, который является последним стабильным выпуском на момент написания этой статьи, поэтому я не знаю, применимо ли это для кого-либо еще.

Проверка зависимостей Maven и расширение содержимого storm-core-1.1.0.jar показали, что файл конфигурации для регистрации журнала log4j был вызван log4j2.xml. С осознанием того, что механизм каротажа был log4j , я обратился к документации здесь: https://logging.apache.org/log4j/2.x/manual/index.html Я создал новый файл log4j2.xml под номером src/main/resources (мой проект сконфигурирован Maven, поэтому он находится в корневом пути к классу).Я начал копировать содержимое существующего файла, а также изменение уровня журнала для указанных лесорубов в положение «OFF»:

<?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> 

Запуск «мировой привет» пример, независимо от установки conf.debug() указывает, что - поскольку в настоящее время нет механизма, при котором каротаж должен быть возможен вообще - журналы (наиболее полезно System.out) теперь затихают, за исключением вызовов System.out.println(), которые я помещал в свои тестовые носики/болты. Это именно то, что я хотел! Надеюсь, это поможет кому-то, кроме меня!

+0

Я думаю, что это должно быть принятый ответ. Действительно, установка 'log4j2' является правильным способом ... Отключение журнала полностью нежелательно. Log4j2 имеет более тонкий контроль над этим. – FaithReaper

0

Создайте файл «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>