log4net을 사용하여 응용 프로그램에서 이벤트/정보를 기록하고 있습니다. 적어도 4 클래스에 의해 구현 된 인터페이스 IReader
있고 성장할 수 있습니다. 각 클래스는 읽기가 실패한 경우 오류를 기록하려는 ReadBuffer()
메소드가 있습니다. 다음은 하나의 클래스에 대한 메소드 정의입니다.인터페이스에서 log4net을 설정하는 방법
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 인터페이스를 통과 할 수 있어요 경우 I 동일한 파일로 모든 클래스를 로그 할 수 있습니다. IPortM350Connection
을 IReader
으로 바꿀 때 로그 항목이 없습니다. 누구나 인터페이스에 대한 설정 파일을 작성했거나이를 극복하는 방법을 알고 있습니까?
안녕 조, 대답 해줘서 고마워. 모든 클래스에 사용할 수있는 공용 로거 라이브러리를 만들려고하는데 설치 파일에 구성되어 있습니다. IReader 객체를 전달하려고 시도 할 수 있지만 순환 참조 오류가 발생합니다. IReader 인터페이스 클래스에만 사용되는 다른 메소드를 작성하여 접근 방식과 비슷하게 만들고 logObject.GetType.GetInterface ('IReader')를 사용하여 IReader 유형으로 오브젝트를 형변환했습니다. – Purusartha