2012-06-28 3 views
37

Я хотел бы иметь два разных регистратора log4j в моем приложении, и для этого не должно быть «перекрытия» между содержимым, которое они пишут в их журналах уважения.log4j.properties file - несколько регистраторов в одном классе

Например:

  • Logger1 пишет INFO событие, связанное с одним набора системных событий
  • Logger2 пишет INFO событие, связанное с другим набором системных событий
  • записи не должна появиться в журнале дважды

Мой log4j.properties выглядит следующим образом:

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

Мой Java код выглядит следующим образом:

public static void main(String[] args) { 
    PropertyConfigurator.configure(Client.class 
      .getResource("/log4j.properties")); 
    xdasLogger = Logger.getLogger("xdasLogger"); 
    logger = Logger.getLogger(Client.class); 

    logger.info("normal"); 
    xdasLogger.info("xdas"); 
} 

Но мой вывод консоли выглядит следующим образом:

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 
xdas 

Обратите внимание, что "XDAS" регистрируется обоими logger и xdasLogger, что нежелательно.

Кто-нибудь знает, какие изменения мне нужно внести в мои log4j.properties, чтобы изменить вывод консоли на следующее?

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 

Решение (из принятого ответа):

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

ответ

41

Попробуйте установить аддитивность лесорубов ложь. Это позволит избежать распространения в rootLogger.

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 
+0

Ваше решение кажется абсолютно правильным, но не работает для меня. Я добавил эти строки в '/ etc/spark/conf/log4j.properties', это неправильно? Нужно ли мне перезапускать «Spark» (или сбросить что-нибудь еще), чтобы обновленные свойства были подобраны? –

+0

Использовали ли вы имена журнала, уже настроенные в log4j.properties для Spark? Или, может быть, Spark использует log4j2, у которого есть другой файл свойств - log4j2.properties? Если вы можете дать более подробную информацию, я могу попытаться помочь – kjp

+0

** @ kjp **, насколько мне известно, 'Spark 2.3.0' (выпущен 28 февраля 2018 года) все еще использует' log4j', как сказано [здесь] (https : //spark.apache.org/docs/latest/configuration.html#configuring-logging). Кроме того, что вы подразумеваете под * «именами журналов, уже настроенными в log4j.properties для Spark» *? В файлах 'log4j.properties' я вижу строки типа« log4j.rootCategory = WARN, console' & 'log4j.appender.console = org.apache.log4j.ConsoleAppender' –

Смежные вопросы