17

Ubuntu の OpenJDK 1.7 で実行されている Tomcat 7.0.28 を使用しており、java.util.logging.SimpleFormatter で使用されるフォーマット文字列を変更しようとしています。そのクラスの Javadocs によると、プロパティ java.util.logging.SimpleFormatter.format を指定してフォーマットを変更できます。実際、Eclipse で webapp を実行し、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 を変更するなど、考えられることはすべて試しました。何も違いはないようです。

4

5 に答える 5

8

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\""
于 2013-02-04T16:13:05.213 に答える
3

これで問題が解決するかどうかはわかりませんが、試してみる価値はあります。私の場合、プロパティを使用する代わりにプログラムでログ設定を行っていましたが、同じ動作が見られました。(私の場合) FileHandler を構築する前に、java.util.logging.SimpleFormatter.format のプロパティ値を設定する必要があることがわかりました。FileHandler を構築した後、SimpleFormatter を構築する前に設定していました。プロパティ ファイルで、Handler プロパティを定義する前に java.util.logging.SimpleFormatter.format を定義すると、問題が解決するのではないかと思います。

于 2012-11-15T03:13:24.170 に答える