1

j2ee アプリケーションを logback に移行した場合の影響を確認するために、POC を実行しています。私は公式ウェブサイトでしばらく過ごしましたが、明らかに、新しいjar以外の唯一の変更はlogback.xmlファイルでした。残念ながら、十分ではないようです。デプロイは機能し、ログ ファイルも作成されますが、何も記録されません (空)。

私のコードには次のステートメントがあります

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger log = LoggerFactory.getLogger(CustomerServiceBean.class);
log.debug("test Log Back - customer ID  " + input.getCustomerId());

pom.xml は次のようになりました

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version>0.9.18</version>
 </dependency>

logback.xml (公式 Web サイトの Web ユーティリティを使用して作成)

<configuration>
   <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
   <File>/var/log/dcs-3/dcs3.log</File>
   <encoder>
     <pattern>%d{ABSOLUTE} %5p %c{1}:%L - %m%n</pattern>
   </encoder>
   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
     <maxIndex>1</maxIndex>
     <FileNamePattern>/var/log/dcs-3/dcs3.log.%i</FileNamePattern>
   </rollingPolicy>
   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
     <MaxFileSize>1MB</MaxFileSize>
   </triggeringPolicy>
 </appender>
 <logger name="com.lgi.dcs" level="DEBUG" />
 <root level="debug">
   <appender-ref ref="file"/>
 </root>
</configuration>

何か案が?ありがとう

更新
提案されたように、さらにいくつかの変更を加えました。問題は未解決ですが、より多くの情報を得ることができました。
単純な DEBUG ではなく、ERROR をログに記録しました。プロジェクトからすべての log4j jar または依存関係を削除し、log4j-bridge を追加しました。別の投稿から取得したもう 1 つの一般的なもので logback.xml を変更し、ファイルに加えてコンソールでアペンダーを使用しました。

私の IDE では、Logger インスタンスが ch.qos.locback.classic.Logger によって実装されているように見えます。ログ ファイルはまだ空ですが、削除すると、サーバーの起動時に再作成されます。サーバー ログで、次のようなテスト メッセージを確認できます。

SLF4J: クラスパスに複数の SLF4J バインディングが含まれています。SLF4J: [zip:/opt/oracle-soa/user_projects/domains/osb/servers/AdminServer/tmp/_WL_user/dcs3-ear-3/9yhkv9/APP-INF/lib/logback-classic-0.9.18 でバインドが見つかりました.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: [zip:/opt/oracle-soa/user_projects/domains/osb/servers/AdminServer/tmp/_WL_user/dcs3-ear-3/9yhkv9 でバインドが見つかりました/APP-INF/lib/logback-classic-0.9.18.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:説明については、http: //www.slf4j.org/codes.html#multiple_bindingsを参照してください。11:40:17.902 [[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'] エラー cldscustomer.CustomerServiceBean - テスト ログ バック - カスタマー ID 6107576

おそらく、weblogic内のlog4jについて考えさせられます。

4

3 に答える 3

0

Log4jLoggerAdapter は SLF4J Log4J ラッパー実装に存在します。ほとんどの場合、クラスパスにslf4j-log4j12があるため、同時に SLF4J の 2 つのロギング バックエンド impl (LogBack と Log4J Impl) が存在します。

もう1つの答えは、log4j-over-slf4jについて言及しています。これは、Log4Jへの呼び出しをリダイレクトしてSLF4Jを使用するためのものであり、LogBackを使用している場合は存在する必要があります(もちろん、log4jメッセージをSLF4Jを通過させたい場合)

于 2013-08-08T06:22:25.140 に答える
0

上で述べたように、ロガー ファクトリは logback ではなく log4j のインスタンスを返します。これは、クラスパスにまだ log4j があることを意味します。直接提供されて誤ってそこに残されるか、使用しているライブラリへの依存関係として発生する可能性があります。Maven を使用している場合は、log4j の存在について EFFECTIVE POM を調査し、それらを除外してみてください。それ以外の場合は、手動で行う必要があります。その依存関係が見つかった場合は、それを削除するとうまくいくはずです。

探すべき jar は、おそらく slf4j bridge log4j-over-slf4jです。jcl-over-slf4jも関連している可能性があります。

于 2013-08-08T05:44:35.447 に答える
0

Java EE アプリケーションの場合、アプリケーションがファイル システムに直接書き込むと、仕様が破られます (マルチ JVM コンテナーで壊れるため)。

これにより、基本的に戦争中/耳内ロギングが除外されます。

代わりに、slf4j java.util.logging ブリッジの使用を検討し、コンテナーにロギングのキャプチャーと管理を任せてください。

于 2016-10-14T15:20:25.410 に答える