为什么 log4net 日志消息有一些未知字符?
Why log4net log message have some unknown character?
我使用 log4net 来记录我的日志。
并在此处使用配置(仅记录消息):
<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>
但是当我打开日志文件时,如果使用 UTF-8 编码,则行消息似乎很正常。如果在 ANSI 编码中,这些行消息在行的开头有一个未知字符。
看这里:
<?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>
然后当我的应用程序读取日志行时,它可以读取和处理这个字符。
我的配置有什么问题?或解决此问题的任何解决方案?
我只想要我的日志行:
<?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>
这些字符 
是 byte order mark (BOM):
The UTF-8 representation of the BOM is the (hexadecimal) byte sequence
0xEF,0xBB,0xBF. A text editor or web browser misinterpreting the text
as ISO-8859-1 or CP1252 will display the characters  for this.
您可以使用其他编码 class 而不是默认编码来抑制 BOM
例如:
<encoding type="System.Text.UTF8Encoding"/>
我使用 log4net 来记录我的日志。 并在此处使用配置(仅记录消息):
<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>
但是当我打开日志文件时,如果使用 UTF-8 编码,则行消息似乎很正常。如果在 ANSI 编码中,这些行消息在行的开头有一个未知字符。 看这里:
<?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>
然后当我的应用程序读取日志行时,它可以读取和处理这个字符。 我的配置有什么问题?或解决此问题的任何解决方案? 我只想要我的日志行:
<?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>
这些字符 
是 byte order mark (BOM):
The UTF-8 representation of the BOM is the (hexadecimal) byte sequence 0xEF,0xBB,0xBF. A text editor or web browser misinterpreting the text as ISO-8859-1 or CP1252 will display the characters  for this.
您可以使用其他编码 class 而不是默认编码来抑制 BOM
例如:
<encoding type="System.Text.UTF8Encoding"/>