java.util.logging: как установить уровень с помощью пакета логгера (или префикса)?
Мое приложение использует много библиотек, и я использую java.util.logging
для регистрации. Я хотел бы иметь возможность устанавливать разные уровни ведения журнала для каждой библиотеки, выполнив что-то вроде:
org.datanucleus.*.level = WARNING
com.google.apphosting.*.level = WARNING
com.myapp.*.level = FINE
Это возможно?
3 ответа
Вы не должны использовать "*". Пример logging.properties может быть таким как:
handlers=java.util.logging.ConsoleHandler
.level=ALL
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
org.datanucleus.level=WARNING
org.datanucleus.handler=java.util.logging.ConsoleHandler
com.myapp.level=FINE
com.myapp.handler=java.util.logging.ConsoleHandler
И если все уровни "org" должны быть зарегистрированы как WARNING, то
org.level=WARNING
org.handler=java.util.logging.ConsoleHandler
Я смог заставить его работать так:
handlers= java.util.logging.ConsoleHandler
.level= INFO
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
com.myapp.level = ALL
com.myapp.handler=java.util.logging.ConsoleHandler
Было бы неплохо контролировать ведение журнала, используя только logging.properties
:
org = FINE
com = SEVERE
К сожалению, соответствующий журнал должен быть действительно создан. Изменение файла настроек не подойдет для вас. Добавьте регистраторы самостоятельно, и это будет работать:
private static final Logger ORG_ROOT_LOGGER = Logger.getLogger("org");
private static final Logger COM_ROOT_LOGGER = Logger.getLogger("com");
Вложенные регистраторы в вашем приложении работают так же:
# perhaps in the main entry point for your application?
private static final Logger APP_ROOT_LOGGER = Logger.getLogger("com.myapp");
# in each package or class you want to have separately controlled loggers
private static final Logger LOG = Logger.getLogger(HelloWorldApp.class.getName());
# in logging.properties
com.myapp.level = FINE # sufficient to make all your loggers log as FINE
com.myapp.HelloWorldApp.level = SEVERE # turn off msgs from that particularly chatty app