16

現在、新しいWebアプリケーション(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)

4

3 に答える 3

23

新しいクラスをどのインターフェイスにプログラムしますか?loag4jまたはslf4j?

SLF4Jを使用する場合は、そのインターフェイスにプログラムします。これは、基盤となるロギングの実装に最も柔軟性を提供します。slf4jのポイントは、プログラムできるインターフェイスになることです。したがって、将来、たとえばログバックに切り替えることにした場合でも、コードを書き直す必要はありません。

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

それらをあなたのWARに入れてください。

JARをTomcatlibsディレクトリに配置する唯一の理由(imo)は、JARがネイティブライブラリをロードする必要がある場合です。Javaでは2つの異なるクラスローダーから同じネイティブライブラリをロードできないため、共通の場所に配置する必要があります。しかし、それはここでは当てはまりません。

一部の人々は、libディレクトリをスペースを節約する方法と考えています。これは、「サーバークラス」のマシンに1 GBのRAMが搭載されていた場合に有効だった可能性がありますが、それ以上ではありません。また、回避libするということは、デバッグが難しいクラスローディングの問題のほとんどを回避することを意味します。

どのjarをデプロイする必要がありますか?

  • slf4j-apiは基本的なAPIです
  • slf4j-log4j12は、実際のログをLog4Jにルーティングします
  • jcl-over-slf4jは、Commons Loggingをインターセプトし、SLF4Jを介して(Log4Jに)ルーティングします。
  • log4jが物理ロギングフレームワークになります

Log4Jの構成が既にあるか、その構成を作成することに慣れていることを前提としています。そうでない場合、そしてあなたが気にするのはLog4Jを内部で使用するコードを扱うことだけですlog4j-over-slf4j、それはLog4J呼び出しを傍受します。次に、Logbackなどのフレームワークを選択する必要があります。

(注:私は元々これらすべてのパッケージへのリンクを追加しましたが、それらを投稿するのに十分な担当者がいません。したがって、すべてのSLF4Jパッケージが強調表示されたMavenリポジトリーへ単一のリンクがあります)

于 2013-02-26T18:40:18.800 に答える
8

私は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)

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

例:weblogic12cこれは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>
于 2015-06-05T16:01:35.730 に答える
1

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

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