2012-05-14 13 views
12

私はWeblogic12でsl4j/logbackを設定しようとしています。 私はWEB-INF \クラスを持っているwarファイルを、持っている耳のファイルを、展開\ここlogback.xml
はconfigです: sl4j/weblogicのログバック

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <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> 

ログインするマイコード:

private static final Logger logger = LoggerFactory.getLogger(FrontEndServlet.class); 
//...... 
logger.info("info test"); 
logger.debug("debug test"); 
logger.error("error test"); 

標準出力に表示されるのは、

ьрщ 14, 2012 5:09:29 PM .....FrontEndServlet doPost 
INFO: info test 
ьрщ 14, 2012 5:09:29 PM .....FrontEndServlet doPost 
SEVERE: error test 

です。設定ファイルが取得されていないようです。 私は何が間違っていますか?

答えて

6

問題は - sl4jはログバックを取得せず、代わりにWeblogicのslf4j-jdkロギングを使用しました。 WebLogicの設定のweblogic-application.xmlの、オプションで好むアプリケーション・パッケージ

19

問題は、ここでは詳細に説明されて固定することができます:https://stagingthinking.wordpress.com/2012/06/02/annoying-slf4j-problem-in-weblogic-server-12c/

あなたが配置する必要があり、正確なパッケージ好むアプリケーション・パッケージ機構にこのように、org.slf4jです:

<?xml version='1.0' encoding='UTF-8'?> 
<weblogic-application> 
    <prefer-application-packages> 
    <package-name>org.slf4j</package-name> 
    </prefer-application-packages> 
</weblogic-application> 
6

注:また、この質問にはすでに回答済みです。私は、prefer-application-resourcesも追加する必要があることを付け加えたいと思います。

回答:prefer-application-packagesprefer-application-resourcesの両方を含む、あなたの耳にMETA-INF /のweblogic-application.xmlのと呼ばれるファイルを追加します!あなただけSLF4J以上に問題がある場合

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-application 
     xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.5/weblogic-application.xsd" 
     version="6"> 

    <!-- http://www.torsten-horn.de/techdocs/jee-oracleweblogic.htm --> 
    <prefer-application-packages> 
     <package-name>org.slf4j.*</package-name> 
    </prefer-application-packages> 


    <!-- if not using prefer-application-resources you will get a warning like this: --> 
    <!-- Class path contains multiple SLF4J bindings --> 
    <!-- SLF4J: Found binding in [jar:file:/C:/wls1211/modules/org.slf4j.jdk14_1.6.1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] --> 
    <prefer-application-resources> 
     <resource-name>org/slf4j/impl/StaticLoggerBinder.class</resource-name> 
    </prefer-application-resources> 


</weblogic-application> 
+1

どのように、どのファイルを使用する必要があるかを説明すると非常に明確です。ありがとうございました! – ferreirabraga

0

あるいは、または、あなたは

<wls:container-descriptor> 
    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> 
</wls:container-descriptor> 

代わりの

<prefer-application-packages> 
    <package-name>org.slf4j.*</package-name> 
</prefer-application-packages> 

使用することができ出典:Oracle

0

環境:Weblogicの12.2 .1 ロギングフレームワーク:SLF4JとLogback 要件:要件を満たしていなかったweblogic.xmlの<prefer-application-packages/><prefer-web-inf-classes>を使用する(アプリケーションごとに)私が選んだのファイルと同様に、WebLogic Serverのログ

にログインします。私のテストでは、どちらか一方のタグを使用して(両方を使用することはできません)、アプリケーションlogback.xmlが取得され、ログはlogback.xmlに定義されたファイルに送られます。ただし、LogbackのConsoleAppenderを使用した標準的なSTDOUT定義では、サーバーログに記録されません。

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 

以下をweblogicから削除します。xml

<wls:prefer-application-packages> 
    <wls:package-name>org.slf4j.*</wls:package-name> 
</wls:prefer-application-packages> 

Weblogic 12.2.1にバンドルされているSLF4jバインディングを使用すると、Java Utilのログになります。この場合、ログ・ステートメントはサーバー・ログに送られ、アプリケーション・レベルlogback.xmlのファイル定義には送られません。私の研究では、Weblogic 12の一部のバージョンでは内部SLF4jがLog4jにバインドされていましたが、マイナーリリースのいずれかで削除されていました。これは私の場合でした。管理コンソールからLog4jをWeblogicのプライマリログフレームワークとして有効にするオプションがありませんでした。私はこれが私を助けてくれないだろうと確信していますが、私が読んだいくつかの書類にはこれが利用可能であることが示されているので、注意する必要がありました。

weblogic.xml、POM(除外など)の設定、さまざまなバインディングとブリッジの使用を検討した結果、私は必要なロギング設定を達成できませんでした。 Weblogicのslf4jは、Javaユーティリティのログにバインドされているようです。独自のslf4j実装とバインディング(私の場合はLogback)を選択した場合、コンフィグレーションを通じてこれらのメッセージをWeblogicサーバのログにルーティングする方法はありません。 slf4jには1つのバインディングしか存在できませんが、多くのフレームワークはその1つのバインディングにルーティングできます(this図が役に立ちました)。Weblogic 12.2.1はJavaのロギングバインディングのみを使用します。アプリケーション構成レベル)を使用してWeblogicに接続し、サーバーログに記録するために提供するLogbackバインディングを使用します。これを達成するためにlog4jとブリッジを使用する方法があるかもしれませんが、私にとっては単純なロギング作業を達成するにはそれが非常に膨らんで構成されています。

設定でこれを克服しようと思いついたので、ログ記録イベントをJULログイベントに変換する独自のログバックアペンダーを作成することにしました。多くのLogbackの例に見られる標準STDOUTの定義をLogbackのAppenderBaseのown実装に置き換えました。この時点で、アプリケーションごとのログ設定を使用してログを記録し、Weblogic Serverログにもログすることができます。

関連POM依存性:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.25</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.2.3</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-core</artifactId> 
     <version>1.2.3</version> 
    </dependency> 

のweblogic.xml(Hibernateが自動的にSLF4Jへの橋渡しなるJbossLoggingが付属していることをここで注意してください)

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/2.0/weblogic-web-app.xsd"> 
<jsp-descriptor> 
    <keepgenerated>true</keepgenerated> 
    <debug>true</debug> 
</jsp-descriptor> 
<context-root>YourContextRoot</context-root> 
<wls:container-descriptor> 
    <wls:prefer-application-packages> 
     <wls:package-name>ch.qos.logback.*</wls:package-name> 
     <wls:package-name>org.jboss.logging.*</wls:package-name> 
     <wls:package-name>org.slf4j.*</wls:package-name> 
    </wls:prefer-application-packages> 
    <wls:prefer-application-resources> 
     <wls:resource-name>org/slf4j/impl/StaticLoggerBinder.class</wls:resource-name> 
    </wls:prefer-application-resources> 
</wls:container-descriptor> 

Logback AppenderBase実装

import java.util.logging.Logger; 

import ch.qos.logback.classic.spi.ILoggingEvent; 
import ch.qos.logback.core.AppenderBase; 

public class WeblogicAppender extends AppenderBase<ILoggingEvent> { 

private final Logger logger = Logger.getLogger(WeblogicAppender.class.getName()); 
ILoggingEvent event = null; 

@Override 
protected void append(ILoggingEvent event) { 
    this.event = event; 
    logger.log(getJULLevel(), event.getFormattedMessage()); 
} 

private java.util.logging.Level getJULLevel() { 

    if (this.event == null) { 
     return java.util.logging.Level.SEVERE; 
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.ALL) { 
     return java.util.logging.Level.ALL; 
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.DEBUG) { 
     return java.util.logging.Level.FINE; 
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.ERROR) { 
     return java.util.logging.Level.SEVERE; 
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.INFO) { 
     return java.util.logging.Level.INFO; 
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.TRACE) { 
     return java.util.logging.Level.FINEST; 
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.WARN) { 
     return java.util.logging.Level.WARNING; 
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.OFF) { 
     return java.util.logging.Level.OFF; 
    } else { 
     return java.util.logging.Level.INFO; 
    } 
} 

}

Logback.xml構成

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<appender name="STDOUT" class="com.your.package.WeblogicAppender"> 
    <encoder> 
     <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger: LineNumber:%L - %message%n</pattern> 
    </encoder> 
</appender> 
<appender name="FILE" 
    class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>yourlog.log 
    </file> 
    <rollingPolicy 
     class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
     <fileNamePattern>yourlog.%d{yyyy-MM-dd}.%i.log 
     </fileNamePattern> 
     <maxFileSize>25MB</maxFileSize> 
     <maxHistory>60</maxHistory> 
     <totalSizeCap>10GB</totalSizeCap> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger: LineNumber:%L - %message%n</pattern> 
    </encoder> 
</appender> 

<root level="TRACE"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="FILE" /> 
</root> 
</configuration> 

がうまくいけば、私は他の人に私は私が望んでいたこの作業方法を取得しようとして行った痛みの一部を保存することができます。

関連する問題