現在、log4net を利用する Windows サービスを開発しています。このサービスには、指定された間隔でジョブを処理するタイマーが含まれています。Log4net は正常に動作しており、サービス自体も正常に動作していますが、log4net はタイマーが経過するたびに空白の「log.Info」エントリを書き込んでいます。
空白のエントリは次のようになります。
2012-05-15 14:58:34,141 [9] INFO ServiceHelper.JobOperations [(null)] -
Windows サービスの基本構造を以下に示します。他の誰かがこの奇妙な問題に遭遇しましたか?
サービス コントローラ クラス
public partial class JobProcessor : ServiceBase
{
private JobOperations _operations;
public JobProcessor()
{
XmlConfigurator.Configure(); //init log4net here
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_operations = new JobOperations();
_operations.Start();
}
protected override void OnStop()
{
_operations.Stop();
}
}
サービスのメイン クラス:
public class JobOperations
{
// Logging...
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
protected Timer Tmr;
public JobOperations()
{
var interval = 3000;
Tmr = new Timer(interval);
Tmr.Elapsed += tmr_Elapsed;
}
public void Start()
{
Tmr.Start();
log.Info("Job Processor: STARTED.");
}
public void Stop()
{
Tmr.Stop();
log.Info("Job Processor: STOPPED.");
}
//
// Main operation for Windows Service
public static void CheckJobQueue()
{
// Do stuff in here...
}
//
// Timer Elapsed Method Call..
protected void tmr_Elapsed(object sender, ElapsedEventArgs e)
{
//
// Halt timer...
Tmr.Stop();
CheckJobQueue();
//
// Start timer...
Tmr.Start();
}
}
* UPDATE * : 以下にコメントしてくださった方々に感謝します。まず、log4net の構成を以下に追加しました。次に、現在ログに記録されている空白のメッセージに加えて、実際のメッセージもログに記録されています。
log4net 構成ファイル
<?xml version="1.0"?>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="SmtpAppender"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="G:\pathToLogFiles\"/>
<datePattern value="'Application_'yyyyMMdd'.log'"/>
<appendToFile value="true"/>
<maximumFileSize value="1024KB"/>
<maxSizeRollBackups value="5"/>
<rollingStyle value="Date"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender><!--LocalFile logging (Daily)-->
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="something@someone.com"/>
<from value="someone@something.com"/>
<subject value="*** SERVER ERROR ***"/>
<smtpHost value="smtp.gmail.com"/>
<authentication value="Basic"/>
<port value="587"/>
<username value="something@someone.com"/>
<password value="mysupersecretusername"/>
<EnableSsl value="true"/>
<bufferSize value="1"/>
<lossy value="true"/>
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline"/>
</layout>
</appender><!--SMTP Logging (Critical Errors)-->
</log4net>