Подтвердить что ты не робот

Java Logging - как перенаправить вывод в пользовательский файл журнала для журнала?

У меня вопрос о конфигурации ведения журнала jdk. У меня есть EJB (развернутый в стеклянную рыбку), который использует JDK Logging для вывода сообщений. Поэтому я использую именованный логгер с таким кодом:

private static Logger logger = Logger.getLogger("org.imixs.workflow");
.....
       logger.fine(" some info...");
....

Я знаю, что я могу настроить loglevel для моего регистратора, добавив следующую строку в файл logging.properties из Glassfish:

.....
org.imixs.workflow.level=FINE

Но как я могу указать выходной файл для моего регистратора? Я хотел бы поместить все сообщения из регистратора с именем "org.imixs.workflow" в отдельный файл. Возможно ли это?

Спасибо за любую помощь

4b9b3361

Ответ 1

для этого

можно использовать слегка запутанное свойство шаблона FileHandler.
handlers=java.util.logging.FileHandler
# Default global logging level. 
.level=INFO

#logging level for the foo.bar package
foo.bar.level=CONFIG 
java.util.logging.FileHandler.pattern=%h/java%u.log

Шаблон состоит из строки, которая включает следующие специальные компоненты, которые будут заменены во время выполнения:

"/" локальный разделитель пути

"% t" системный временный каталог

"% h" значение системного свойства "user.home"

"% g" номер генерации для различения повернутых журналов

"% u" уникальный номер для разрешения конфликтов

"%%" переводит на один знак процента "%"

Если вы хотите войти в несколько файлов, вы можете сделать это, установив несколько обработчиков для нескольких именованных журналов

#FileHandler for file1    
java.util.logging.FileHandler.pattern = logging_property_test.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

#FileHandler for file2
logging.FileHandler2.pattern = logging_property_test2.log
logging.FileHandler2.limit = 50000
FileHandler.count = 1
logging.FileHandler2.formatter = java.util.logging.SimpleFormatter


#setting handler for logger1
logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler

#setting handler for logger2
logging.PropertyTestingLogger2.handlers=logging.FileHandler2

как вы можете видеть, трюк заключается в том, что существует logging.FileHandler2, который является обычным классом и ничего не делает, кроме расширения FileHandler

package logging;

import java.io.IOException;
import java.util.logging.FileHandler;

public class FileHandler2 extends FileHandler {

    public FileHandler2() throws IOException, SecurityException {
        super();
    }

}

Фон: к сожалению, создатели Java не ожидали, что кто-либо войдет в систему в нескольких файлах. Если вы посмотрите на источник java.util.logging.FileHandler, вы обнаружите, что свойство pattern загружается именем класса:

public class FileHandler extends StreamHandler {

   private String pattern;

   private void configure() {

        String cname = getClass().getName();
        pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log");

Ответ 2

Вы должны использовать FileHandler.

FileHandler fileHandler = new FileHandler("myLogFile");
logger.addHandler(fileHandler);

См. Пример Depot для некоторых четких примеров настройки журналов.

И вы можете найти эти ответы полезными для установки из файла свойств.

Ответ 3

С java.util.logging, он НЕ доступен, просто изменив файл конфигурации. К сожалению, вы должны расширить FileHandler и настроить этот обработчик для фильтрации того, что вы хотите зарегистрировать.