2009-06-22 4 views
2

Ich benutze AdoNetAppender, um Nachrichten zu protokollieren. Ich habe das Konvertierungsmuster% property {log4net: HostName} zum Nachrichtenparameter hinzugefügt.Wie mache ich einen Teil von log4net Nachricht Großbuchstaben

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

Ausgang ist wie

[Hostname] - foo bar.

Aber ich möchte die Ausgabe wie

[HOST] - foo bar.

Wie kann ich den Hostnamen Großbuchstaben mithilfe von Konvertierungsmustern machen?

Regards,

Cankut

Antwort

3

Die von Ron Grabowski vorgeschlagene Lösung ist, die sich PatternConverter.

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

Verwendung in der Konfigurationsdatei:

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

FWIW (vielleicht jemand anderes dies nützlich finden), NLog 2.0 (und vielleicht auch die 1.0 Refresh) hat einiges Layout "Wrapper" hinzugefügt, die Modifikation des erlaubt Ausgabe eines Layouts. Siehe hierzu link, nach unten.

Unter den Wrappern sind Großbuchstaben, Kleinbuchstaben, Trim Whitespace, Pad und ein paar mehr. So könnten Sie wahrscheinlich ein Layout definieren, das die Felder angibt, die in der Ausgabe enthalten sein sollen, und die ganze Sache oder einen Teil davon in den "Großbuchstaben" -Wrapper "wickeln". Ich kenne die genaue Syntax nicht wirklich. Ich weiß, dass Sie Layouts in andere Layouts einfügen können, um ein Layout für "Hostname" zu definieren, es in den "Großbuchstaben" -Wrapper einzubinden und dieses Layout dann in das endgültige Layout einzufügen . In Pseudo-Code (Konfigurationsdatei Pseudo-Code, Code nicht Pseudo-Code) (sehr pseudo!):

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

Oder Sie könnten es tun:

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

Jetzt kann UHOST in dem "realen" Layout enthalten sein dies:

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

Bitte beachte, dass ich eigentlich nicht tun dies in NLog versucht, werde ich nur von dem, was auf ihrer Website.

Verwandte Themen