web-dev-qa-db-ja.com

log4j2.0とslf4jおよびCommonsLoggingを一緒に使用する方法

現在、新しいWebapp(Tomcat 6で実行)を開始しています。slf4jを使用するコンポーネントとコモンログを使用するコンポーネントがあります。いくつかの理由(主にアペンダー:SocketAppenderとSyslogAppenderだけでなく、ログイベントを失うことなく構成の再読み込みを促進しました)

今私の質問は次のとおりです。-新しいクラスをどのインターフェイスにプログラムしますか? loag4jまたはslf4j?またはコモンズロギング?

  • Jarをデプロイするための好ましい方法は何ですか?それらをアプリケーション戦争に入れますか、それともTomcatライブラリに入れますか?

  • どのjarをデプロイする必要がありますか? log4j(slf4jおよびcommonsバインディングを含む)、commonsロギング(slf4j-api-1.7.2.jar)およびslf4j api(slf4j-api-1.7.2.jar)

14
raudi

私はlog4j2でslf4jを使用していて、

slf4j-api-1.7.12.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
log4j-slf4j-impl-2.2.jar
jcl-over-slf4j-1.7.12.jar(get rid of commons logging jars)

アプリサーバーのバージョンが競合している場合は、ベンダー固有のクラスローダー設定を使用してオーバーライドする必要がある場合があります

例えばweblogic 12cの場合これはsrc/main/webapp/WEB-INF内のweblogic.xmlにあります

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app 
xmlns="http://xmlns.Oracle.com/weblogic/weblogic-web-app" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd 
http://xmlns.Oracle.com/weblogic/weblogic-web-app http://xmlns.Oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd">
<container-descriptor>
    <prefer-application-packages>
        <package-name>org.Apache.log4j.*</package-name>
        <package-name>org.Apache.commons.logging.*</package-name>
        <package-name>org.Apache.commons.lang.*</package-name>
        <package-name>org.Apache.commons.io.*</package-name>
        <package-name>org.Apache.commons.collections4.*</package-name>
        <package-name>org.slf4j.*</package-name>
    </prefer-application-packages>
</container-descriptor>
<jsp-descriptor>
    <keepgenerated>true</keepgenerated>
    <debug>true</debug>
</jsp-descriptor>
<context-root>/cnfg</context-root>
</weblogic-web-app>
7
Kalpesh Soni

Log4J 1.2でSLF4Jを使用しましたが、Log4J2.0を使用していないことに注意してください。そうは言っても、私はあなたの質問に次のように答えます:

  1. SLF4Jへのプログラム。ロギングフレームワークからおそらく必要となるすべてのものである、素晴らしくシンプルなAPIがあります。さらに、何らかの理由でLogbackまたはLog4J 1.2など、Log4J 2.0の代わりに切り替えることにした場合は、バックエンドのjarを切り替えることができます。
  2. 間違いなく瓶をアプリケーション戦争に入れてください。 jarをアプリケーションサーバーのlibディレクトリに配置することはほとんどありません。そうしないと、自分だけでなく、そのアプリケーションサーバー上のすべてのWebアプリケーションに影響します。さらに、アプリケーションサーバーのlibディレクトリ内のjarは、webappsをデプロイすることによって制御することはできませんが、手動で管理する必要があります。
  3. 必要になるようです slf4j-api-1.7.2.jarlog4j-to-slf4j-2.0-beta4.jarlog4j-2.0-beta4.jar および log4j-core-2.0-beta4.jar 、および依存関係。あなたがそれを使用しているなら、Mavenは必要な依存関係をもたらすと確信しています。
1
Eric Galluzzo