java.util.logging: как установить уровень с помощью пакета регистратора (или префикса)?

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

org.datanucleus.*.level = WARNING
com.google.apphosting.*.level = WARNING
com.myapp.*.level = FINE

Возможно ли?


person Igor Gatis    schedule 13.10.2010    source источник


Ответы (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.level=WARNING
org.handler=java.util.logging.ConsoleHandler
person VolkanT    schedule 17.01.2014

Я смог заставить его работать следующим образом:

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
person Brad G Reynolds    schedule 03.10.2015

Было бы неплохо управлять ведением журнала, используя только logging.properties:

org = FINE
com = SEVERE

К сожалению, соответствующий журнал должен быть действительно создан. Изменение вашего файла conf не поможет вам. Добавьте логгеры сами и все заработает:

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
person Jake Biesinger    schedule 21.09.2013