ログバックに問題があります。私はそれを(mavenを使用して)セットアップしましたが、Logbackが構成ファイルを見つけられないと報告することを除いて、すべてが正常に見えます(ただし、デフォルトのロガー構成を使用してコンソールにログを記録できます)。
[#| 2013-07-03T07:55:30.843 + 0200 | INFO | glassfish3.1.2 | javax.enterprise.system.std.com.Sun.enterprise.server.logging | _ThreadID = 124; _ThreadName = Thread-2; | 07:54:39,844 | -ch.qos.logback.classic.LoggerContextの情報[デフォルト]-リソースが見つかりませんでした[logback.groovy]
07:54:39,844 | -ch.qos.logback.classic.LoggerContextの情報[デフォルト]-リソースが見つかりませんでした[logback-test.xml]
07:54:39,844 | -ch.qos.logback.classic.LoggerContext [default]の情報-リソース[logback.xml]が見つかりませんでした
07:54:39,847 | -ch.qos.logback.classic.LoggerContext [default]のINFO-デフォルト設定を設定します。 |#]
構成ファイル(logback.xmlと呼ばれる)をMavenアーティファクト(WAR)のsrc/main/resources
フォルダーに配置しました。興味深いことに、クラスパスから構成を読み込もうとすると、成功します。
Reader r = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("logback.xml"));
StringWriter sw = new StringWriter();
char[] buffer = new char[1024];
for (int n; (n = r.read(buffer)) != -1; )
sw.write(buffer, 0, n);
String str = sw.toString();
System.out.println(str);
これは私のサンプル構成ファイルを印刷します:
[#|2013-07-03T07:55:30.844+0200|INFO|glassfish3.1.2|javax.enterprise.system.std.com.Sun.enterprise.server.logging|_ThreadID=124;_ThreadName=Thread-2;|<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root> </configuration>|#]
私のpom.xml
には次のエントリがあります。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
これはWARファイル(EARファイル内)としてパックされています。 WARファイル内のlogback.xmlの場所は次のとおりです。WEB-INF/classes/logback.xml
誰かが私のセットアップの何が問題になっているのか考えていますか?
助けてくれて本当にありがとうございます
stupidSheep
WARファイル内の場所は正しいです。WEB-INF/classes
。
logback構成ドキュメント は、戦争内でlogback.xmlファイルを配置できる場所について説明していますが、EARについては何も言及していません。
このリンクの情報を試していただけませんか?特定の方法でEARに詰め込む必要があるのではないかと思います。
(編集:2番目のリンクが削除され、機能しませんでした)
Logbackは、例のコードと非常によく似たコード、つまりgetClassLoader()。getResourceAsStream( "logback.xml")を呼び出します。 logbackがlogback.xmlを見つけられない場合は、ログバッククラスをロードしたクラスローダーにリソースが表示されていない可能性があります。このクラスローダーは、logback.xmlを見つけることができるテストコードをロードしたクラスローダーとはおそらく異なります。
WAR内でロギングフレームワークの構成ファイルを配信すると、すべてが期待どおりに問題なく機能します。しかし、EARでこれを試してみると、魔法のように何かが起こり、ロギングフレームワークは構成ファイルを見つけることができません。また、デフォルトの動作を使用します。私はそれを次のようにして解決しました:
EARフォルダのすぐ下に新しいフォルダを作成します。たとえば、「classes」-> MyEar/classesという名前の新しいフォルダを作成します
Logback.xmlファイルを次の新しいフォルダーに配置します:MyEar/classes/logback.xml
WARファイルのMANIFEST.MFファイルで、次の新しいフォルダーをクラスパスに追加します。マニフェスト-バージョン:1.0クラス-パス:クラス
そのため、クラスパスにlogback.xmlが含まれていても、ビルドプロセスに含まれていなかった場合にも、同様の問題が発生しました。最近、gradleに切り替えました。 build.gradleのsourceSetに特にsrc/main/resourcesを追加したにもかかわらず、最初はビルドに含まれていないリソースファイルで問題が発生していました。
そのため、当時の私の解決策は、ファイルの種類をインクルードに入れることでした。
includes = ["**/*.css", "**/*.wav", "**/*.mp3", "**/*.mp4", "**/*.png"]
しばらく経ちましたが、ログ設定が適用されていないことに気付きました。ログを微調整して問題を調べるのにかなりの時間を費やしました。私はすぐにファイルが含まれていないことに気づきました。
String URL = "logback.xml";
System.out.println(ClassLoader.getSystemResource(URL));
インクルードにファイルの種類を入れなければならなかったことを思い出しました。 xmlタイプを追加しましたが、機能しました。
sourceSets {
main {
resources {
srcDirs = ["src/main/Java", "src/main/resources"]
includes = ["**/*.css", "**/*.wav", "**/*.mp3", "**/*.mp4", "**/*.png", "**/*.xml"]
}
}
}