2011-12-13 27 views
8

誰でも教えてください。 log4jとapache.commons.loggingの関係は何ですか?どちらがより普及し、より良いですか?私はlog4jとapache.commons.loggingとの関係

例えば
public static void info(String caller, String toWrite) 
    { 
     write(caller,toWrite,Log.INFO); 
    } 

を彼らはimport org.apache.commons.logging.LogFactory;を輸入し、Logと呼ばれる別のクラスを書かれている既存のアプリケーションをインポートし、criticalとしてメソッドの一部をオーバーライドし、warninfoいる

は誰でした私はlog4jとapache.commons.loggingは異なると教えてください?

答えて

11

Apache Commons Loggingは、具体的な実装の抽象です。 log4jが存在し、設定されている場合はlog4jを使用します。私はログオンの実装として私のコードとlog4jでCommonsを使うでしょう。

+0

私は、なぜログはApache Commonsのを使用するために、ログ実装として私のコードとlog4jの中コモンズロギングを使用します? – Pawan

+0

実行時に異なる実装を使用することも、実装しないこともできるため、プログラムの柔軟性が向上します。 –

+0

ありがとうございました。 – Pawan

2

log4jはロギングフレームワークです。つまり、ログメッセージにコードを提供します。 Commons-loggingは、フレームワークを記録するための抽象化レイヤーであり、何もログに記録しません。たとえば、COMMONログを使用してコードを記述してJBossにデプロイする場合、log4jによってロギングが行われますが、WebSphereにログオンする場合は、WebSphere自身のロギング実装によってログが記録されます。私は、スタンドアローンのアプリケーション、それコモンズ・ログのjavaの-docのドキュメントを1として

0

を使用しているJavaの独自のロギングと同じコードを実行した場合

動的にログを選択するには、次のアルゴリズムを実装したLogFactoryの具象サブクラス

  • 要求 実装クラスを識別するために org.apache.commons.logging.Logという名前の工場出荷時の設定属性を使用しますのラッパーをインスタンス化する実装クラス。
  • org.apache.commons.logging.Logシステム・プロパティーを使用して、要求された実装クラス を識別します。
  • Log4Jが利用可能な場合は、 org.apache.commons.logging.impl.Log4JLoggerのインスタンスを返します。
  • JDK 1.4以降が使用可能な場合は、 org.apache.commons.logging.impl.Jdk14Loggerのインスタンスを返します。
  • そうでない場合、

org.apache.commons.logging.impl.SimpleLog のインスタンスを返すしたがって推論は:

  • コモンズロギングは、抽象化のより多くです。それはLOG4Jなしでも生きることができます。
  • Log4jが存在する場合、Log4jが選択されます。そうでなければ他のデフォルトが利用可能です。
  • LOG4Jは、ファイルへの出力のリダイレクトが容易で、ログレベルを柔軟に設定できるので人気があります。

のJavaDoc URL:https://commons.apache.org/proper/commons-logging/javadocs/api-1.1.3/index.html