[解決済み] プログラムによるLog4jロガーの設定
質問
SLF4Jを使おうとしています(
log4j
バインディング) を初めて使用します。
私は、異なるレベルのログを記録し、異なるアペンダーにメッセージをプッシュするLoggerFactoryによって返される3つの異なる名前のロガーを構成したいと思います。
-
ロガー1 "FileLogger"はDEBUGを記録し、以下の場所に追記します。
DailyRollingFileAppender
-
ロガー2 "TracingLogger"はTRACE+のログを記録し
JmsAppender
-
Logger 3 "ErrorLogger"は、ERROR+を記録し、別の
JmsAppender
さらに、プログラムで設定したい(XML や
log4j.properties
ファイル)を作成します。
通常であれば、これらを定義すると想像します。
Logger
のように、ブートストラップコードのどこかで
init()
メソッドを使用します。しかし、私が使いたいのは
slf4j-log4j
ロガーを定義し、クラスパスで利用できるようにする場所について、私は混乱しています。
私は 信じる なぜなら、SLF4J API を使用する私のコードは、これらのロガーが存在することを決して知ることがないからです。私のコードは、SLF4J APIに通常の呼び出しを行い、クラスパスで見つけたlog4j Loggersに転送するだけです。
しかし、クラスパス上のこれらのlog4j Loggersをどのように設定するのでしょうか...Javaで?
解決方法は?
Log4jにプログラム的にAppenderを追加/削除することができます。
ConsoleAppender console = new ConsoleAppender(); //create appender
//configure the appender
String PATTERN = "%d [%p|%c|%C{1}] %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.FATAL);
console.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(console);
FileAppender fa = new FileAppender();
fa.setName("FileLogger");
fa.setFile("mylog.log");
fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(fa);
//repeat with all other desired appenders
init()のどこかに、これが他の何よりも先に実行されることが確実なものを入れておくといいと思います。 そして、ルートロガーにある既存のアペンダーをすべて削除するには
Logger.getRootLogger().getLoggerRepository().resetConfiguration();
を追加することから始めてください。もちろん、これが動作するためには、クラスパスにlog4jが必要です。
備考
任意の
Logger.getLogger(...)
を選択し、アペンダーを追加します。私はルートロガーを取りましたが、これはすべてのものの底にあり、他のカテゴリのアペンダーを通過するすべてのものを処理するからです(additivityフラグを設定することによって他の構成がない限り)。
ロギングがどのように機能し、ログがどこに書き込まれるかがどのように決定されるかを知る必要がある場合
このマニュアルを読む
をご覧ください。
要するに
Logger fizz = LoggerFactory.getLogger("com.fizz")
は、カテゴリ "com.fizz"のロガーが得られます。
上記の例では、これで記録されたものはすべて、ルート logger のコンソールとファイルアペンダに参照されることを意味します。
にアペンダーを追加した場合
Logger.getLogger("com.fizz").addAppender(newAppender)
からのロギングは
fizz
は、ルート ロガーのアペンダーと
newAppender
.
設定によってロガーを作成するのではなく、システムで考えられるすべてのカテゴリーに対してハンドラーを提供するだけです。
関連
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
javaでよく使われる英単語
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
ローカルリソースのロードが許可されていない場合の解決策
-
[解決済み】なぜjava.util.loggingを使用しないのですか?
-
[解決済み] Java Loggingフレームワークにおけるマーカーとは何か、マーカーを使用する理由とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
SpringBootApplication を型解決できない。
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
linux run jarfile Invalid or corrupt jarfile error.
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合