Запись логов в другой файл только для определенного потока - PullRequest
0 голосов
/ 12 февраля 2019

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

# Root logger option
log4j.rootLogger=INFO, file ,sim

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=../log/main.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=30
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


#log messages to a log file
log4j.appender.sim=org.apache.log4j.RollingFileAppender
log4j.appender.sim.File=../log/custom.log
log4j.appender.sim.MaxFileSize=10MB
log4j.appender.sim.MaxBackupIndex=30
log4j.appender.sim.layout=org.apache.log4j.PatternLayout
log4j.appender.sim.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

При этом все регистрируется в обоих журналах, несмотря на то, что я делал это в классе Java

private static Logger customLogger= Logger.getLogger("custom");

Мой сценарий заключается в том, что мне нужно писать в этот customLogger всякий раз, когда я хочу в этом потоке кода.Этот поток не ограничен одной упаковкой.

1 Ответ

0 голосов
/ 12 февраля 2019

Функция getLogger(String name) фактически связывает регистратор со строкой, которую вы передаете в качестве аргумента.Этот метод обычно используется с именами классов, поэтому вы можете получить приложения, настроенные с вашим именем класса.

Если вы не указали ни одного в log4j.properties, который соответствует вашему случаю, он использует rootLogger с настроенным обоими вашими приложениями, и поэтому он регистрируется два раза.

Способ, которым выВы можете решить эту проблему, объявив регистратор с пользовательским именем, а затем получите регистратор с именем "sim" и добавьте его вместе с вашим appender.

Добавьте следующее log4j.properties, и оно будет работать:

log4j.logger.sim=INFO, sim
log4j.additivity.sim=false

Однако я не рекомендую этот способ ведения журналов, потому что он может быть очень сложным, чтобы понять, когда ваши классы начинают использовать более одного регистратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...