UbuntuのOpenJDK 1.7で動作するTomcat 7.0.28を使用しており、Java.util.logging.SimpleFormatterで使用されるフォーマット文字列を変更しようとしています。そのクラスのJavadocによると、プロパティJava.util.logging.SimpleFormatter.formatを指定してフォーマットを変更できます。実際、EclipseでWebアプリケーションを実行し、logging.propertiesファイルでこのプロパティを変更すると、機能します。
ただし、アプリをTomcatにデプロイすると、このプロパティは効果がないようです。プロパティファイルに加えた他の変更が実際に有効になるため、プロパティファイルが正しく読み取られていると確信しています(を使用してファイルからプロパティを読み込んでいます)
LogManager.getLogManager().readConfiguration(new FileInputStream(file))
ここで、ファイルはweb.xmlファイルのパラメーターを介して構成されます。ファイルをWEB-INF/classes/logging.propertiesに入れてみましたが、動作に変更はありません。
SimpleFormatterのJavadocは、プロパティファイルとシステムプロパティの両方がフォーマット文字列を指定する場合、システムプロパティが優先されることを指定しています。システムプロパティが設定されていないことを確認しました
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
Tomcat/confディレクトリとJRE_HOME/libディレクトリの両方でlogging.propertiesを変更するなど、考えられるすべてのことを試しました。何も違いはないようです。
バグレポート の情報のおかげで、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
あなたは目撃しているかもしれません このバグ 。
このバグは、Tomcatバージョン7.0.41以降および6.0.38以降で修正されています。
Java.util.logging.SimpleFormatter.format は、logging.properties-私には機能しない-またはコマンドライン引数(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\""
デフォルトの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
これで問題が解決するかどうかはわかりませんが、試してみる価値はあります。私の場合、プロパティを使用する代わりにプログラムでログ設定を行っていましたが、同じ動作が見られました。 (私の場合は)FileHandlerを作成する前に、Java.util.logging.SimpleFormatter.formatのプロパティ値を設定する必要があることがわかりました。 FileHandlerを作成した後、SimpleFormatterを作成する前に設定していました。プロパティファイルで、Handlerプロパティのいずれかを定義する前にJava.util.logging.SimpleFormatter.formatを定義すると、問題が解決するかどうか疑問に思います。