난 당신 만의 코드에 펜더 변경에 대한 이야기를 알고,하지만 난 정말 당신이 코드에서 컨텍스트 속성 집합에 따라 선택 펜더를 사용하여 더 많은 혜택을 누릴 것이라고 생각
예는 할 것 구성 파일에서이 같은 :
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender,log4net">
<filter type="log4net.Filter.PropertyFilter">
<key value="target" />
<stringToMatch value="DB" />
<acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<!-- your ado configuration -->
<appender name="AnotherAppender" type="log4net.Appender.EventLogAppender,log4net">
<filter type="log4net.Filter.PropertyFilter">
<key value="target" />
<stringToMatch value="EventLog" />
<acceptOnMatch value="true" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<!-- your Eventlog configuration -->
그런 다음 코드에서, 당신은 목적지까지의 로거
target
속성을 설정할 수 있습니다 당신이 원하는 :
var isDB = true;
var loggingEvent = new LoggingEvent(typeof(Program), Log.Logger.Repository, Log.Logger.Name, Level.Info, "message", null);
loggingEvent.Properties["target"] = isDB ? "DB" : "EventLog";
Log.Logger.Log(loggingEvent);
코드에서 마술 로깅 출력을 숨기지 않고 출력을 구성 할 수 있으므로 쉽게 변경할 수 있으므로 라우팅 만이 응용 프로그램 내부에서 처리해야합니다.
메시지 당 컨텍스트가 필요하지 않은 경우 (예를 들어 라우팅 라우팅 변경이 오랜 시간 동안 다시 전환되지 않는다는 것을 알고있는 경우) 설정할 수있는 세 가지 컨텍스트 중 하나를 사용할 수 있습니다 세계적 :
log4net.GlobalContext
는
log4net.ThreadContext
이 같은 스레드에서 로거간에 공유되는 응용 프로그램의 모든 로거에 사용되는
- ThreadLogicalContext는 스레드에 대한 동일한 논리 경계에서 로거간에 공유되는
log4net.
(more info on the difference)
새 구성을 사용하려면 각 appender에서 ActivateOptions()를 호출해야합니다. – stuartd