ファイルへのログ記録とメールの送信を行う log4net のカスタム アペンダーを実装しました。ケースごとに異なるメッセージ文字列をログに記録したい。以下のコードは、ファイルに 2 つのログ エントリを作成します。1 つは文字列が追加され、もう 1 つは文字列が追加されていません。また、文字列を追加せずに電子メールを送信します。
public static void Log(this ILog log, Level level, string message)
{
var token = string.Format("{0},{1},{2}", System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, level, message);
int count = _tokenTimeThrottler.CheckAllow(token);
if (count >= 0)
{
//only to file logger, with an appended string
log = LogManager.GetLogger("LogFileAppender");
log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, level, count <= 1 ? message : count + " counts of: " + message, null);
}
//only to mail
log = LogManager.GetLogger("MyMailAppender");
log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, level, message, null);
}
しかし、私がやっているときにファイルにログを記録したくありません。
//only to mail
log = LogManager.GetLogger("MyMailAppender");
log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, level, message, null);
私の構成ファイル、1つのアペンダーは構成ファイルを使用して追加され、もう1つのアペンダーはdllであるため、実行時に追加されます。
最初のアペンダー:
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\git\logs\log.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %m%n" />
</layout>
</appender>
</log4net>
2 番目のアペンダー (実行時に追加):
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
PatternLayout patternLayout = new PatternLayout { ConversionPattern = "%d [%t] %-5p %m%n" };
MyMailAppender myAppender = new MyMailAppender
{
Name = "MyMailAppender",
Layout = patternLayout,
Access = "ghjkgj",
Threshold = Level.Info,
};
myAppender .ActivateOptions();
hierarchy.Root.AddAppender(myAppender );
hierarchy.Root.Level = Level.All;
hierarchy.Configured = true;