Изменение свойства форматирования java.util.logging.SimpleFormatter в Tomcat
Я использую Tomcat 7.0.28, работающий под OpenJDK 1.7 на Ubuntu, и пытаюсь изменить строку форматирования, используемую java.util.logging.SimpleFormatter. Согласно Javadocs для этого класса, я могу указать свойство java.util.logging.SimpleFormatter.format, чтобы изменить формат. И действительно, когда я запускаю свой webapp в Eclipse и изменяю это свойство в файле logging.properties, он работает.
Однако, когда я развертываю приложение в Tomcat, это свойство, похоже, не имеет никакого эффекта. Я уверен, что файл свойств читается правильно, так как другие изменения, которые я им делаю, действительно вступают в силу (я читаю свойства из файла с помощью
LogManager.getLogManager().readConfiguration(new FileInputStream(file))
где файл настроен через параметр в моем файле web.xml. Я попытался поместить файл в WEB-INF/classes/logging.properties, без изменений в поведении.
Javadocs for SimpleFormatter указывает, что если оба файла свойств и системное свойство задают строку форматирования, свойство системы имеет приоритет. Я проверил, что системное свойство не установлено
context.log ("Formatting system property is " + System.getProperty("java.util.logging.SimpleFormatter.format"));
в методе ServletContextListener.contextInitialized.
Здесь мой файл свойств ведения журнала полностью
handlers=java.util.logging.ConsoleHandler
# Default logging level for root logger
.level=FINE
# Set the level for the ConsoleHandler
java.util.logging.ConsoleHandler.level=FINE
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=[%1$tF %1$tr] %3$s %4$s: %5$s %n
Я пробовал все, о чем я мог думать, включая изменение logging.properties в каталоге TOMCAT/conf и JRE_HOME/lib. Кажется, ничего не имеет значения.
Ответы
Ответ 1
Благодаря информации в отчете об ошибке, указанном nolan6000, я, наконец, получил эту работу с tomcat-juli.
Вместо:
java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
он должен быть:
1catalina.java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
Ответ 2
java.util.logging.SimpleFormatter.format действительно документируется как устанавливаемый в logging.properties, который не работает для меня либо, либо как команда line аргумент (опция java).
Аргумент командной строки работает для меня. Поскольку переменная $JAVA_OPTS проходит так много подделок и заканчивается на eval, так я ее решил (на Debian, java 1.7.0_07, apache-tomcat-7.0.30)
$CATALINA_HOME/bin/catalina.sh(строка 230):
JAVA_OPTS="$JAVA_OPTS \"-Djava.util.logging.SimpleFormatter.format=%1\\\$tY-%1\\\$tm-%1\\\$td %1\\\$tH:%1\\\$tM:%1\\\$tS.%1\\\$tL %4\\\$s %3\\\$s %5\\\$s%6\\\$s%n\""
Ответ 3
Вы можете наблюдать эту ошибку.
Исправлена ошибка с Tomcat версии 7.0.41 и далее 6.0.38 и далее.
Ответ 4
Не знаю, решит ли это вашу проблему, но, возможно, стоит попробовать. Я видел одно и то же поведение, хотя в моем случае я делал настройку регистрации программным путем вместо использования свойств. Оказывается, значение свойства для java.util.logging.SimpleFormatter.format должно быть установлено до построения (в моем случае) FileHandler. Я устанавливал его после создания FileHandler, но перед построением SimpleFormatter. Интересно, будет ли в вашем файле свойств определять java.util.logging.SimpleFormatter.format ПЕРЕД определением любого из свойств Handler, решит проблему.
Ответ 5
Использование шаблона форматирования по умолчанию для логатора Tomcat 8 JULI нуждается в этом, вы можете поместить аргументы в глобальный $tomcat/conf/logging.properties
или webapp файл $tomcat/webapps/myapp/WEB-INF/classes/logging.properties
.
Это мой глобальный файл, в котором также отключены файлы журнала manager-webapp. Линия ведения журнала:
2015-09-23 17:32:11 INFO org.apache.catalina.startup.Catalina Server startup in 1028 ms
#handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
# formatter attributes = date, source, logger, level, message, thrown
java.util.logging.SimpleFormatter.format = %1$tF %1$tT %4$s %3$s %5$s%6$s%n
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
#1catalina.org.apache.juli.AsyncFileHandler.bufferSize = 2048
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8
2localhost.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
#2localhost.org.apache.juli.AsyncFileHandler.bufferSize = 2048
#3manager.org.apache.juli.AsyncFileHandler.level = FINE
#3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
#4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
#4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
java.util.logging.ConsoleHandler.level = FINE
#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
# For example, set the org.apache.catalina.util.LifecycleBase logger to log
# each component that extends LifecycleBase changing state:
#org.apache.catalina.util.LifecycleBase.level = FINE
# To see debug messages in TldLocationsCache, uncomment the following lines
#org.apache.jasper.compiler.TldLocationsCache.level = FINE
#org.apache.jasper.servlet.TldScanner.level=FINE