log4net输出到文件乱码(一切字符英文、数字),同时输出到Console可以看到

bear6 2019-06-06 02:03:51
log4net很奇怪的问题,不知道有没有兄弟遇到过


文本(不仅仅是中文,一切字符)输出到TXT文件出来的就是??????这样的乱码,检测过是ASCII编码,如果设置<param name="Encoding" value="utf-8" />,打开文件都是空格占位(或者是无法显示的字符)

同样的内容同时通过log4net输出到Console是可以看到~~~实在搞不懂了

配置:

<log4net>
<root>
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
<!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="all"/>
      <appender-ref ref="RollingLogFileAppender"/>
    <appender-ref ref="ColoredConsoleAppender" />
</root>
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="ERROR" />
<foreColor value="White" />
<backColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="DEBUG" />
<backColor value="Green" />
</mapping>

<mapping>
<level value="Info" />
<backColor value="Yellow" />
</mapping>

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Debug"/>
<param name="LevelMax" value="Fatal"/>
</filter>
</appender>
    <!-- Define some output appenders -->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
      <file value="log/"/>
<!--不加utf-8编码格式,中文字符将显示成乱码-->
<!--<param name="Encoding" value="utf-8" />-->
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<datePattern value="yyyyMMdd'log.txt'"/>
<!--是否追加到文件,默认为true,通常无需设置-->
   <!--是否向文件中追加日志-->
      <appendToFile value="true"/>
<!--变换的形式为日期,这种情况下每天只有一个日志-->
<!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
<!--变换的形式为日志大小-->
<!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<RollingStyle value="Composite"/>

     <!--每天记录的日志文件个数,与maximumFileSize配合使用-->
      <MaxSizeRollBackups value="10000000"/>
      <!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
    <!--每个日志文件的最大大小-->
<!--可用的单位:KB|MB|GB-->
<!--不要使用小数,否则会一直写入当前日志--> 
<maximumFileSize value="1KB"/>


      <!--否只写到一个文件中-->
      <staticLogFileName value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger  操作者ID:%property{Operator} 操作类型:%property{Action}%n    当前机器名:%property%n当前机器名及登录用户:%username %n    记录位置:%location%n 消息描述:%property{Message}%n     异常:%exception%n 消息:%message%newline%n%n-->
        <!--<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>-->
<!--<conversionPattern value="%date:%message%newline" />-->

<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
     
</layout>
   
</appender>

</log4net>



程序里调用,
For a = 1 To 10
logger.Info("QEQWEWQEWQEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
Next

可以在Console里看到
2019-06-06 13:51:53,901 [1] INFO MainForm [(null)] - QEQWEWQEWQEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
2019-06-06 13:51:53,902 [1] INFO MainForm [(null)] - QEQWEWQEWQEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

文件里始终就是乱码


...全文
738 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vin_Lee 2019-06-10
  • 打赏
  • 举报
回复
引用 7 楼 bear6 的回复:
终于找到问题了 <layout type="log4net.Layout.PatternLayout"> <!--记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n--> <!--<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>--> <!--<conversionPattern value="%date:%message%newline" />--> <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout> 这段配置,把里面的注释肯空格全部去掉,就OK了,很神奇的问题 <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout>
学到了,另外谢分
bear6 2019-06-06
  • 打赏
  • 举报
回复
终于找到问题了 <layout type="log4net.Layout.PatternLayout"> <!--记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n--> <!--<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>--> <!--<conversionPattern value="%date:%message%newline" />--> <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout> 这段配置,把里面的注释肯空格全部去掉,就OK了,很神奇的问题 <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout>
bear6 2019-06-06
  • 打赏
  • 举报
回复
引用 5 楼 泡泡龙的回复:
英文和数字哪来的乱码,肯定是别的问题
我新建了个项目,只加载log4net,然后拷贝到另外一台机器运行,还是这样,奇了怪 我也是觉得只有英文数字,不可能有乱码啊
泡泡龙 2019-06-06
  • 打赏
  • 举报
回复
英文和数字哪来的乱码,肯定是别的问题
vin_Lee 2019-06-06
  • 打赏
  • 举报
回复
引用 3 楼 bear6 的回复:
[quote=引用 1 楼 vin_Lee 的回复:] 这应该不是log4net的问题,应该是你系统的默认编码(语言)导致你txt打开文件的问题。 txt默认使用ANSI编码,在中文系统就是GB2312 可以试试用notepad++或者sublime text打开文件看一下,应该不会是乱码的
我用vs code打开过,切换加载了里面支持的所有编码格式,还是乱码啊 另外我也上传到LINUX服务器上,cat了一下这个文本文件,还是乱码 内容都是全英文和数字的,没有中文[/quote] 那这个问题还真的挺奇怪的。你这个是服务器么?还是你本机 本机的话我建议你重装系统。因为搞着搞着说不定改了什么特别的东西。。。
bear6 2019-06-06
  • 打赏
  • 举报
回复
引用 1 楼 vin_Lee 的回复:
这应该不是log4net的问题,应该是你系统的默认编码(语言)导致你txt打开文件的问题。 txt默认使用ANSI编码,在中文系统就是GB2312 可以试试用notepad++或者sublime text打开文件看一下,应该不会是乱码的
我用vs code打开过,切换加载了里面支持的所有编码格式,还是乱码啊 另外我也上传到LINUX服务器上,cat了一下这个文本文件,还是乱码 内容都是全英文和数字的,没有中文
耗子哭死猫 2019-06-06
  • 打赏
  • 举报
回复
GB2312
vin_Lee 2019-06-06
  • 打赏
  • 举报
回复
这应该不是log4net的问题,应该是你系统的默认编码(语言)导致你txt打开文件的问题。 txt默认使用ANSI编码,在中文系统就是GB2312 可以试试用notepad++或者sublime text打开文件看一下,应该不会是乱码的

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧