2009-06-22 5 views
2

AdoNetAppender를 사용하여 메시지를 기록하고 있습니다. % property {log4net : HostName} 변환 패턴을 메시지 매개 변수에 추가했습니다. 푸 바 -log4net 메시지의 일부분을 대문자로 만드는 방법

<parameter> 
     <parameterName value="@message"/> 
     <dbType value="String"/> 
     <size value="4000"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%property{log4net:HostName}] - %message"/> 
     </layout> 
</parameter> 

출력

[ 호스트]와 같다. foo는 바 -

는하지만 난

[HOSTNAME]와 같은 출력을합니다.

변환 패턴을 사용하여 호스트 이름을 대문자로 만들려면 어떻게해야합니까? 론 Grabowski의 제안

감사

Cankut

답변

3

용액 PatternConverter 연장된다. 구성 파일의

public class HostNameToUpperConverter : PatternConverter 
{ 
    protected override void Convert(TextWriter writer, object state) 
    { 
     string hostName = (string)GlobalContext.Properties[LoggingEvent.HostNameProperty]; 
     writer.Write(hostName.ToUpper()); 
    } 
} 

사용 :

<layout type="log4net.Layout.PatternLayout"> 
     <converter> 
      <name value="hostNameToUpper" /> 
      <type value="MyApplication.HostNameToUpperConverter" /> 
     </converter> 
     <conversionPattern value="[%hostNameToUpper] - %message" /> 
</layout> 
0

FWIW (어쩌면 다른 사람이 유용 할 것이다), NLog 2.0 (어쩌면 1.0 새로 고침)의 수정을 허용 일부 레이아웃 "래퍼"를 추가했습니다 레이아웃의 출력. 하단의 link을 참조하십시오.

래퍼 중 대문자, 소문자, 공백, 패드 및 몇 가지가 있습니다. 따라서 출력에 포함될 필드를 지정하고 "대문자"래퍼에 전체 또는 일부를 "래핑"하는 레이아웃을 정의 할 수 있습니다. 정말 정확한 구문을 모르지만 다른 레이아웃에 레이아웃을 포함 할 수 있으므로 "호스트 이름"에 대한 레이아웃을 정의하고 "대문자"래퍼로 래핑 한 다음 최종 레이아웃에 레이아웃을 포함시킬 수 있습니다. . 의사 (구성 파일 의사 코드가 아닌 의사 코드) (! 매우 유사)에서 :

${datetime} | ${uhost} | ${message} 

을 또는, 당신처럼 그것을 할 수 있습니다 지금

var host=${gdc:hostname} 
var uhost=${uppercase=true,inner=host} 

uhost은 "진짜"레이아웃에 포함 할 수 있습니다 이 :

${datetime} | ${uppercase=true, inner=${gdc:hostname}} | ${message} 

실제로 NLog에서이 작업을 시도하지는 않았지만 실제로 웹 사이트에있는 것만 사용하고 있습니다.

관련 문제