アプリケーションからイベント/情報をログに記録するために log4net を使用しています。IReader
少なくとも 4 つのクラスによって実装されているインターフェイスがあり、それは成長する可能性があります。各クラスにはReadBuffer()
、読み取りが失敗した場合にエラーをログに記録するメソッドがあります。以下は、1 つのクラスのメソッド定義です。
public class IPortM350Connection : IReader
{
public void ReadBuffer()
{
try
{
this.AddToLog(iqBeaconLogType.Info, string.Format("Reader# {0} start reading.", SerialNumber));
while (IsConnected)
{
if (IportM350Obj != null && IportM350Obj.DataStream.IsOpen)
{
var data = IportM350Obj.GetBeaconTags();
var rampTagList = Utility.Identec350TagToTag(data);
if (rampTagList != null && rampTagList.Any())
{
var e = new RampTagReadEventArg(rampTagList);
// trigger Successful Tag read event
ReadMessage(this, e);
}
}
}
}
catch (ReaderTimeoutException ex)
{
this.AddToLog(iqBeaconLogType.Fatal, string.Format("Reader# {0} failed reading.", SerialNumber));
}
}
}
AddToLog 拡張メソッドは、以下に示すログの作成を担当します。
public static void AddToLog(this object logObject, iqBeaconLogType logType, string message)
{
ILog log = LogManager.GetLogger(logObject.GetType());
var msg = string.Format("Event occured in : {0} at time {1}. Event Log : {2}",
logObject.GetType().ToString(),DateTime.Now.ToString(), message);
log.Fatal(msg);
}
このメソッドは、以下のようにクラスを読み取るように構成ファイルをセットアップすると正常に機能します。
<logger name="iqBeaconv7_1.ReaderLayer.Connection.IPortM350Connection" additivity="False">
<level value="ALL"/>
<appender-ref ref="RollingFileCompositeAppenderForIPort350Connection"/>
</logger>
ただし、 IReader インターフェイスをロガーに渡すことができれば、すべてのクラスを同じファイルでログに記録できると思います。に置き換えIPortM350Connection
ても、ログ エントリは取得されませんIReader
。インターフェースの設定ファイルを書いた人はいますか、それともこれを克服する方法を知りましたか?