2017-06-30 3 views
0

Ich benutze log4net für die Protokollierung meiner Protokolle. und Verwendung Konfiguration hier (nur protokollieren die Nachricht):Warum log4net Log-Nachricht haben unbekannte Zeichen?

<logger name="LogTracking"> 
     <level value="INFO" /> 
     <appender-ref ref="LogTrackingAppender" /> 
    </logger> 
    <appender name="LogTrackingAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="logging\urltracking\" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Composite" /> 
     <maxSizeRollBackups value="-1" /> 
     <maximumFileSize value="20MB" /> 
     <encoding value="utf-8" /> 
     <datePattern value="yyyy'\\'MM'\\'dd'\\'yyyyMMddHH'.log'" /> 
     <staticLogFileName value="false" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message%newline" /> 
     </layout> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    </appender> 

Aber wenn ich meine Protokolle Datei zu öffnen, wenn in UTF-8 die Linien kodieren Nachricht normal erscheint. Und wenn in der ANSI-Codierung diese Zeilen-Nachricht ein unbekanntes Zeichen am Anfang der Zeilen hat. Siehe hier:

<?xml version="1.0" encoding="utf-8"?><UrlTrackingObj><Url>mysite</Url><Action>view</Action><Ip>::1</Ip><Os>Windows 8.1</Os><Browser>Chrome 59.0</Browser></UrlTrackingObj> 

Dann, wenn meine app Protokollzeilen liest, ist es dieses Zeichen lesen und verarbeiten kann. Was ist meine Konfiguration falsch? oder irgendeine Lösung, die dieses Problem löst? Ich möchte meine Logzeile nur:

<?xml version="1.0" encoding="utf-8"?><UrlTrackingObj><Url>mysite</Url><Action>view</Action><Ip>::1</Ip><Os>Windows 8.1</Os><Browser>Chrome 59.0</Browser></UrlTrackingObj> 

Antwort

2

Diese Zeichen  sind die byte order mark (BOM):

Die UTF-8-Darstellung der Stückliste ist die (hexadezimal) Bytefolge 0xEF, 0xBB, 0xBF. Ein Texteditor oder Webbrowser, der den Text als ISO-8859-1 oder CP1252 falsch interpretiert, zeigt die Zeichen ï »¿dafür an.

können Sie die anderen Codierung Klasse verwenden eher als den Standard die BOM wie zu unterdrücken:

<encoding type="System.Text.UTF8Encoding"/> 

System.Text.UTF8Encoding

+0

Es bedeutet, dass ich ersetzen muss '' by ''? –

+0

@SonNguyen ukm einfach 'type' Attribut zum' encoding' Tag hinzufügen. –

+0

@SonNguyen sollten Sie die Antwort akzeptieren, wenn es hilft, Ihr Problem zu lösen, das für spätere Benutzer sehr nützlich ist. :) Bitte beziehen Sie sich darauf: [Annahme von Antworten: Wie funktioniert es?] (Https://meta.stackexchange.com/a/5235) –

Verwandte Themen