tomcat の WEB-INF/classes ディレクトリに logging.properties を配置しています
2 つの異なるファイルにログを記録したいと考えています。例: org.pkg1 は 1 つのファイルに移動し、org.pkg2 は別のファイルに移動します。
1 つのファイルを構成できますが、2 つを構成することはできません。それは可能ですか?
tomcat の WEB-INF/classes ディレクトリに logging.properties を配置しています
2 つの異なるファイルにログを記録したいと考えています。例: org.pkg1 は 1 つのファイルに移動し、org.pkg2 は別のファイルに移動します。
1 つのファイルを構成できますが、2 つを構成することはできません。それは可能ですか?
私はついにこれを理解しました。Tomcat では、この機能を有効にするために Java util logging ("JULI") を拡張します。これは、最終的に私が求めていたものを達成したWEB-INFディレクトリに配置したlogging.propertiesファイルです......:
handlers=1console.java.util.logging.ConsoleHandler, 2jsp.org.apache.juli.FileHandler, 3financials.org.apache.juli.FileHandler
.handlers=1a.java.util.logging.ConsoleHandler
jsp.level=ALL
jsp.handlers=2jsp.org.apache.juli.FileHandler
org.apache.jasper.level = FINE
org.apache.jasper.handlers=2jsp.org.apache.juli.FileHandler
org.apache.jsp.level = FINE
org.apache.jsp.handlers=2jsp.org.apache.juli.FileHandler
com.paypal.level=ALL
com.paypal.handlers=3financials.org.apache.juli.FileHandler
3financials.org.apache.juli.FileHandler.level=ALL
3financials.org.apache.juli.FileHandler.directory=${catalina.base}/logs
3financials.org.apache.juli.FileHandler.prefix=financials.
2jsp.org.apache.juli.FileHandler.level=ALL
2jsp.org.apache.juli.FileHandler.directory=${catalina.base}/logs
2jsp.org.apache.juli.FileHandler.prefix=jsp.
1console.java.util.logging.ConsoleHandler.level=FINE
1console.java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
logging.properties の構成について言えば、複数のアペンダーを使用するメカニズムは見つかりませんでした。私は自分に合った簡単な回避策を作成しました。
public class CustomAFileHandler extends FileHandler {
public DebugFileHandler() throws IOException, SecurityException {
super();
}
}
public class CustomBFileHandler extends FileHandler {
public DebugFileHandler() throws IOException, SecurityException {
super();
}
}
そして私のlogging.properties
...
handlers=<pkg_name>.CustomAFileHandler, <pkg_name>.CustomBFileHandler, java.util.logging.ConsoleHandler
<pkg_name>.CustomAFileHandler.level=ALL
<pkg_name>.CustomAFileHandler.pattern=%h/A%u.log
<pkg_name>.CustomAFileHandler.limit=50000
<pkg_name>.CustomAFileHandler.count=1
<pkg_name>.CustomAFileHandler.formatter=java.util.logging.SimpleFormatter
<pkg_name>.CustomBFileHandler.level=ALL
<pkg_name>.CustomBFileHandler.pattern=%h/B%u.log
<pkg_name>.CustomBFileHandler.limit=50000
<pkg_name>.CustomBFileHandler.count=1
<pkg_name>.CustomBFileHandler.formatter=java.util.logging.SimpleFormatter
...
異なる引数を持つ java.util.logging クラスを使用して、同じタイプの 2 つのハンドラーを取得する簡単な方法はありません。これを行う最も簡単な方法は、logging.properties に FileHandler サブクラスを作成して、次のように適切な引数を渡してログを有効にすることです。
org.pkg1.handlers=java.util.logging.FileHandler
org.pkg2.handlers=org.pkg2.FileHandler
java.util.logging.FileHandler.pattern="org_pkg1_%u.%g.log"
org.pkg2.FileHandler.pattern="org_pkg2_%u.%g.log"
org/pkg2/FileHandler.java:
package org.pkg2;
import java.util.logging.*;
public class FileHandler extends java.util.logging.FileHandler {
public FileHandler() {
super(LogManager.getLogManager().getProperty("org.pkg2.FileHandler.pattern"));
}
}
私自身も同じ問題を抱えjava.util.logging
ていて、与えられた答えに満足していないので、ドキュメントで見つけました:
2.2 構成の変更
以下は、ロギング構成を動的に調整して出力を特定のファイルに送信し、ウォンバットに関する多くの情報を取得する小さなプログラムです。パターン「%t」は、システムの一時ディレクトリを意味します。
public static void main(String[] args) {
Handler fh = new FileHandler("%t/wombat.log");
Logger.getLogger("").addHandler(fh);
Logger.getLogger("com.wombat").setLevel(Level.FINEST);
...
}
したがって、複数のアペンダーをインスタンス化できないため、.properties ファイルからだけでは実行できないようですが、プログラムで実行できます。また、LoggerManager
純粋な jdk を使用することも可能です (jdk 7 または jdk 8 で試してください)。
カスタム ファイル ハンドラを作成するだけです。「java.util.logging.FileHandler」と同様のものを使用します。
public class JULTestingFileHandler extends FileHandler {
public JULTestingFileHandler() throws IOException, SecurityException
{
super();
}
}
ユーザー プロパティ ファイル。
com.xxx.handlers = com.xxx.JULXXXFileHandler
com.xxx.JULXXXFileHandler.pattern = ./logs/test1_test2.%u.%g.log