[解決済み] log4netの正しい使い方(ロガーネーミング編)
質問
log4netの設定と使用には2つの方法があります。1つは、私自身のアペンダーと関連するロガーを設定することができる場合です。
<!-- language: xml -->
<appender name="myLogAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs\myLog.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level - %message%n" />
</layout>
</appender>
<logger name="myLog">
<level value="All"></level>
<appender-ref ref="myLogAppender" />
</logger>
そして、ログに何か書きたいときは、以下のようにします。
ILog log = LogManager.GetLogger("myLog");
log.Info("message");
もう一つの使い方は、rootを好きなだけ細かく設定することです。
<!-- language: xml -->
<root>
<level value="Error" />
<appender-ref ref="myLogAppender" />
</root>
そしてこの場合、次のようなメッセージをログに残すことができます。
ILog log = LogManager.GetLogger(typeof(Bar));
log.Info("message");
2番目のアプローチの利点は、いくつかのメッセージをその場で有効化または無効化できることです。しかし、問題は、私がEPiServer CMSで開発しており、それはlog4netを使用する独自のロギングシステムを持っており、ルートレベルで情報ロギングを有効にすると、多くのシステムログが書き込まれることです。
log4netはどのように使うのですか?システムの各部分は、それ自身のロガーに書き込みます。または、すべてがデフォルトのロガーに書き込まれ、設定が次に何をするかを決定しますか?
どのように解決するのですか?
コード内のメッセージをどのように記録するかについては、私は2番目の方法を選択します。
ILog log = LogManager.GetLogger(typeof(Bar));
log.Info("message");
上記のログに送られるメッセージは、完全に修飾された型である
Bar
を使って命名されます。
MyNamespace.Foo.Bar [INFO] message
このアプローチの利点は、ロギングを組織化するための事実上の標準であること、 また、名前空間によってログメッセージをフィルタリングすることができることです。たとえば、INFO レベルのメッセージは記録するけれども
Bar
については特に DEBUG に上げることができます。
<log4net>
<!-- appenders go here -->
<root>
<level value="INFO" />
<appender-ref ref="myLogAppender" />
</root>
<logger name="MyNamespace.Foo.Bar">
<level value="DEBUG" />
</logger>
</log4net>
ログを名前でフィルタリングできるのはlog4netの強力な機能ですが、単純にすべてのメッセージを
"myLog"
にログを記録するだけなら、このパワーの多くを失うことになります!
EPiServer CMSに関して、CMSとあなた自身のコードに異なるログレベルを指定するために、上記のアプローチを使用することができるはずです。
さらに読むために、ロギングについて私が書いたcodeprojectの記事があります。
関連
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] 2つのリストを結合する
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー