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

Изменение свойства форматирования 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. Кажется, ничего не имеет значения.

4b9b3361

Ответ 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