2010-01-22 2 views
3

Common.Logging (.Net 용)에 log4net 팩토리 어댑터에 대한 등록 정보를 설정하는 것이 있다면 누구에게 알 수 있습니까?common.logging을 사용하여 log4net 등록 정보를 동적으로 설정하십시오.

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="logs\Log_%property{BrokerID}.txt"/> 
    <appendToFile value="false"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="-1"/> 
    <maximumFileSize value="50GB"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %-5level %logger - %message%newline"/> 
    </layout> 
</appender> 

과 같은 속성을 설정 : 와이어에 common.logging를 사용하는 경우 Log_(null).txt : log4net.GlobalContext.Properties["BrokerID"] = 10

내가 이런 모습으로 끝낼 파일 나는 수행하여 단지 log4net 사용하여 큰 성공을 있었다 즉시 log4net을 설치하십시오.

답변

0

common.logging은 실제 로깅 구현보다 외관을 제공하여 응용 프로그램 코드를 변경하지 않고 log4net, NLog, EntLib 등으로 전환 할 수 있기 때문에 common.logging을 통해이 작업을 수행한다고 생각하지 않습니다. 구성 변경 만). common.logging은 로거 (ILog) 이상의 외관을 제공하지만 로깅 싱크 (log4net 설명의 애펜더)는 넘지 않습니다. 따라서 BrokerID 속성을 구성 할 수 있다고하더라도 다른 로깅 백엔드에서이 속성이 어떻게 사용되는지는 분명하지 않습니다.

+0

각 Common.Logging appender가 동일한 추상화를 통해이 Logger 뒤에이 경로를 라우팅하면 의미가 있습니다. –

3

이전 질문에 대한 답변은 answer입니다. 어쩌면 도움이 될지도 모릅니다.

은 요약하면 : (NET)

  1. Common.Logging "상황"에 대한 지원의 website에 말한다을 "다음"출시 예정이다.

  2. website에서 다음 릴리스 (현재 릴리스는 2.0)가 예약 될 때 명확하지 않습니다. 웹 사이트는 "June"이라고 말합니다. 현재 릴리스 (2.0)는 2009 년 4 월이었습니다. 웹 사이트는 2009 년 5 월에 마지막으로 업데이트되었습니다 (2.0 발표 예정)? "6 월"은 무엇을 의미합니까? 2009 년 6 월? 2010 년 6 월? 둘 다오고 갔다.

  3. Common.Logging에서 아직 "컨텍스트"지원을 사용할 수 없다고 가정하면 Castle 프로젝트의 "컨텍스트"구현을 살펴보십시오 (log4net 구현은 here입니다). 이 구현을 Common.Logging으로 이식하는 것은 어렵지 않습니다. Common.Logging에서 제공되는 컨텍스트 구현은 Castle 구현과 유사하지 않을 수도 있습니다.

  4. 성 "컨텍스트"지원은 ILog/ILogger 인터페이스에서 구현됩니다. 그래서, 오히려이 같은 상황 설정보다 : 로깅 추상화를 통해 상황에

    log4net.GlobalContext.Properties["BrokerID"] = 10; 
    

    액세스 : 직선 log4net을 통해 상황에

액세스를

ILog logger = Common.Logging.LogManager.GetCurrentClassLogger(); 
logger.GlobalContext.Properties["BrokerID"] = 10; 

이에서 꽤 좋은 것 같다 로거가있을 때 컨텍스트를 설정하는 관점. 로거를 얻지 않고 컨텍스트를 설정하기를 원한다면 좋지 않을 수도 있습니다. Common.Logging.LogManager가 어떤 추상화가 "활성"인지를 알고있는 경우 (추상화는 LogManager.Adapter 속성을 통해 설정/가져 오기 가능하므로이를 사용해야합니다). 따라서 ILOG 인터페이스뿐만 아니라 LogManager.Adapter 인터페이스에서도 "컨텍스트"를 사용할 수 있습니다.

+0

2.1 logger.GlobalContextProperties [ "BrokerID"] = 10; 컴파일하지 않습니다 ... – Jaap

+0

2.1에서 무엇? 내 첫 번째 예제, log4net.GlobalContextProperties 분명히 "log4net.GlobalContext.Properties"(속성 전에 점 참고)합니다. 또한, 내 대답은 Common.Logging이 그 당시에는 없기 때문에 Common.Logging에 대한 컨텍스트 개체를 구현하는 방법을 설명한 이전 게시물 (내가 작성한 답변의 첫 번째 문장의 링크 참조)에 주목하십시오. 컨텍스트 개체. 나는 최근에 Common.Logging을 보지 않았다. 그래서 그것이 문맥 객체를 가지는지 아닌지, 만약 그렇다면 구문이 무엇인지 모른다. – wageoghe

+0

아아, 알았어, 너를 비난해서 미안해.), 주제 : 의존성 주입 프레임 워크를 사용하면 log4net의 컨텍스트 속성에 대해 래퍼를 노출하기 쉬워야합니다. 각 웹 요청 (또는 웹 응용 프로그램을 작성하지 않는 경우 다른 시작 지점)에 대해 실행되는 일부 고급 코드를 사용합니다. 그 코드베이스에서는 어쨌든 log4net에 대한 참조를 가지고 있습니다. 왜냐하면 (.config 파일이나 프로그래밍 방식으로) 어댑터를 구성해야하기 때문입니다. – Jaap

2

Common.Logging을 포크하고이 기능을 추가했습니다.

GitHub project 또는 NuGet을 참조하십시오.

또한 변경 사항을 메인 브랜치/프로젝트에 반환하기위한 요청을 제출했습니다.