0

現在、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>
4

0 に答える 0