2010-11-27 3 views
5

У меня есть Java-программа, использующая внешнюю библиотеку. Основная программа использует log4j для регистрации своих сообщений, а в библиотеке используется java.util.logging.Как перенаправить java.util.logging в файл?

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

Я хотел бы перенаправить все сообщения журнала из внешней библиотеки в файл. Я пытался сделать это с logging.properties файла:

handlers= java.util.logging.FileHandler 
.level= INFO 
java.util.logging.FileHandler.pattern = foo.log 
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 

Этот файл инициализируется:

System.setProperty("java.util.logging.config.file", "logging.properties"); 

К сожалению, журнал сообщений из внешней библиотеки продолжают появляться в консоли. Должен ли я использовать что-то вроде slf4j для перехвата сообщений журнала от java.util.logging?

Спасибо за ваше время.

+0

дубликат http://stackoverflow.com/questions/751736/how-to-get-java-logger-output-to-file-by-default –

ответ

11

Вот какой код из одной из моих программ. Это также делает автоматическое вращение. Класс config - это мой собственный, который считывается из файлов свойств. Вы можете просто заменить это своими собственными значениями.

Logger rootLogger = Logger.getLogger(""); 
logHandler = new FileHandler(config.getLogFile(), 
          config.getLogRotateSize()*1024*1024, 
          config.getLogRotateCount(), false); 
logHandler.setFormatter(new SimpleFormatter()); 
logHandler.setLevel(Level.INFO); 
rootLogger.removeHandler(rootLogger.getHandlers()[0]); 
rootLogger.setLevel(Level.INFO); 
rootLogger.addHandler(logHandler); 

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

+0

Ничего себе, это работало безупречно! – gulbrandr

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