ログ レベルを簡単に区別し、クラスごとに異なるログ ターゲット (「アペンダー」) を使用できるようにしたい場合、それは最善の方法ではありません。
通常、各クラスには、ILog
完全修飾型にちなんで名付けられた静的インスタンスを含めることをお勧めします。
namespace Animals
{
public class Dog
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Dog));
}
public class Cat
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Cat));
}
}
これはシングルトンに比べて手間がかかるように見えますが、長期的には非常に便利です。これを行うと、構成ファイルを介してレベルを区別Dog
してログに記録するのは簡単です ( log4net構文で示されている例)。Cat
<log4net>
<!-- appender definitions ommited -->
<!-- default for all loggers in Animals namespace -->
<logger name="Animals">
<level value="WARN"/>
</logger>
<!-- ...but we need full debug for Dogs -->
<logger name="Animals.Dog">
<level value="DEBUG"/>
</logger>
<!-- ...and we want to send Cat messages over e-mail -->
<logger name="Animals.Cat">
<level value="INFO"/>
<appender-ref ref="SmtpAppender"/>
</logger>
</log4net>
log4net のようなロギング フレームワークは、階層ロギングの概念も使用します。ロガーの名前の後にドットが続く場合、そのロガーは別のロガーの祖先であると言われます。この機能を利用するには、(ハードコードされstring
た s を使用して) ロガーに手動で名前を付けるのを避け、型情報を使用して名前空間全体を含めることをお勧めします。