log4net 消息文本问题

Posted

技术标签:

【中文标题】log4net 消息文本问题【英文标题】:log4net message text problem 【发布时间】:2011-05-27 23:17:24 【问题描述】:

我正在尝试使用 File Appender 使 log4net 工作。

我对消息使用指定的模式布局,但问题是我的日志文件中没有文本。只要 '??'符号

消息文本似乎在写入文件之前以某种方式损坏。

我在 windows Server 2008 上使用 Visual Studio 2008。log4net 在 global.asax 中初始化

这是我对 log4net 的配置

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"></section>
. . .
<log4net debug="true">
    <appender name="INFOFileAppender" type="log4net.Appender.FileAppender">
        <lockingmodel type="log4net.Appender.FileAppender+MinimalLock"/>
      <threshold value="INFO" />  
      <file value="AOKlogs.txt" />
        <appendtofile value="true" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>          
    </appender>
    <root>
        <level value="ALLL" />
        <appender-ref ref="INFOFileAppender" />
    </root>
  </log4net>

我尝试了 rollingfile 和 simple file appender 都没有运气。

更新 我启用了调试并配置 log4net 将调试日志写入 txt 文件。这就是它所说的:

我启用了调试日志到 txt 文件,它是这样说的:

log4net:log4net 程序集 [log4net,版本=1.2.10.0,文化=中性,PublicKeyToken=1b44e1d426115821]。从 [C:\Users\ScarryComp\AppData\Local\Temp\Temporary ASP.NET Files\website1\7e2bf4c4\4d1a1e05\assembly\dl3\c6bded9b\0086655c_d353c601\log4net.DLL] 加载。 (Microsoft Windows NT 6.1.7600.0 上的 .NET 运行时 [2.0.50727.4952]) log4net:DefaultRepositorySelector:defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] log4net:DefaultRepositorySelector:为程序集创建存储库 [App_Code.ch9yol_l,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null] log4net: DefaultRepositorySelector: 程序集 [App_Code.ch9yol_l, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null] 从 [C:\Users\ScarryComp\AppData\Local\Temp\Temporary ASP.NET Files\website1\7e2bf4c4\ 加载4d1a1e05\App_Code.ch9yol_l.dll] log4net: DefaultRepositorySelector: Assembly [App_Code.ch9yol_l, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null] 没有指定 RepositoryAttribute。 log4net: DefaultRepositorySelector: Assembly [App_Code.ch9yol_l, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null] 使用存储库 [log4net-default-repository] ​​和存储库类型 [log4net.Repository.Hierarchy.Hierarchy] log4net:DefaultRepositorySelector:使用类型 [log4net.Repository.Hierarchy.Hierarchy] 创建存储库 [log4net-default-repository] log4net:XmlConfigurator:使用 .config 文件部分配置存储库 [log4net-default-repository] log4net:XmlConfigurator:应用程序配置文件是 [C:\Users\ScarryComp\Documents\Visual Studio 2008\WebSites\WebSite1\web.config] log4net:XmlConfigurator:配置存储库 [log4net-default-repository] log4net:XmlHierarchyConfigurator:配置更新模式[Merge]。 log4net: XmlHierarchyConfigurator: Logger [root] 级别字符串为 [ALL]。 log4net:XmlHierarchyConfigurator:记录器 [root] 级别设置为 [name="ALL",value=-2147483648]。 log4net:XmlHierarchyConfigurator:加载 Appender [INFOFileAppender] 类型:[log4net.Appender.FileAppender] log4net:XmlHierarchyConfigurator:将属性 [LockingModel] 设置为对象 [log4net.Appender.FileAppender+MinimalLock] log4net:XmlHierarchyConfigurator:将属性 [阈值] 设置为级别值 [全部] log4net:XmlHierarchyConfigurator:将属性 [文件] 设置为字符串值 [AOKlogs.txt] log4net:XmlHierarchyConfigurator:将属性 [AppendToFile] 设置为布尔值 [True] log4net: XmlHierarchyConfigurator: 参数 [layout] 指定子类型 [log4net.Layout.PatternLayout] log4net: PatternParser: 转换器 [字面] 选项 [ ] 格式 [min=-1,max=2147483647,leftAlign=False] log4net:XmlHierarchyConfigurator:将属性 [Layout] 设置为 PatternLayout 值 [log4net.Layout.PatternLayout] log4net:FileAppender:打开文件以写入 [C:\Users\ScarryComp\Documents\Visual Studio 2008\WebSites\WebSite1\AOKlogs.txt] 附加 [True] log4net:XmlHierarchyConfigurator:创建的 Appender [INFOFileAppender] log4net:XmlHierarchyConfigurator:将名为 [INFOFileAppender] 的附加程序添加到记录器 [root]。 log4net:XmlHierarchyConfigurator:加载 Appender [Console] 类型:[log4net.Appender.ConsoleAppender] log4net:PatternParser:转换器 [消息] 选项 [] 格式 [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: 转换器 [newline] 选项 [] 格式 [min=-1,max=2147483647,leftAlign=False] log4net:XmlHierarchyConfigurator:将属性 [ConversionPattern] 设置为字符串值 [%d %-5l - %m%n] log4net: PatternParser: 转换器 [d] 选项 [] 格式 [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [literal] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: 转换器 [l] 选项 [] 格式 [min=5,max=2147483647,leftAlign=True] log4net: PatternParser: Converter [literal] 选项 [-] 格式 [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: 转换器 [m] 选项 [] 格式 [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: 转换器 [n] 选项 [] 格式 [min=-1,max=2147483647,leftAlign=False] log4net:XmlHierarchyConfigurator:将属性 [Layout] 设置为对象 [log4net.Layout.PatternLayout] log4net:XmlHierarchyConfigurator:创建的 Appender [控制台] log4net:XmlHierarchyConfigurator:将名为 [Console] 的附加程序添加到记录器 [root]。 log4net:XmlHierarchyConfigurator:层次阈值 []

我更改了添加的控制台附加程序,但我的日志中仍然没有看到文本:(

更新 2: 文件附加程序不起作用,但跟踪附加程序似乎没问题。但是,如果 someboydy 可以解释文件附加程序可能发生的事情,那就太好了,所以问题仍然有点悬而未决

【问题讨论】:

【参考方案1】:

我可以想象您遇到了编码问题。 Log4net 默认使用 ANSI 编码,如果您的服务器(或服务)和您的机器不使用相同的编码,您将无法读取文件中的文本。

您可以尝试像这样配置编码:

<appender name="INFOFileAppender" type="log4net.Appender.FileAppender">
    <encoding value="unicodeFFFE" />
    ...

【讨论】:

我刚刚尝试了不同的编码设置,但没有帮助。我的日志文件仍然只包含不可读的字符串。我的日志文件看起来像这样:?? ?? ?? ?? ??日志文件中的每个字符串由 9 个空格和两个问号组成,与消息类型和消息字符串无关 尝试找出内部调试的问题:***.com/questions/756125/… 真的看不出有什么问题。如果您配置跟踪附加程序会发生什么?正常的跟踪系统似乎能够正确写入日志文件...logging.apache.org/log4net/release/sdk/… freaking log4net >:( 现在它可以与 trace appender 一起使用,我可以将这些信息写入文本文件,这很好。非常感谢 Stefan! 在我的 Web 服务器文件附加程序和滚动文件附加程序上不起作用。在我的家用计算机上,文件附加程序不起作用,但滚动文件附加程序起作用。很奇怪……【参考方案2】:

您的等级值似乎有误,您可以尝试与此相同的配置吗?

<root>
    <level value="ALL" />
    <appender-ref ref="INFOFileAppender" />
</root>

【讨论】:

哦..我只是把最后一个配置的文本。但消息问题依然存在 您确定您的 AOKLogs.txt 存储在应用程序池的身份能够写入文件的位置吗?您是否检查了该文件的权限?你是如何写入这个日志的?您可以尝试创建另一个appender,看看是不是appender的文件/配置或Log4net的初始化和调用有问题。 目前我可以说问题不在于对文件的访问,因为 log4net 可以访问那里并添加字符串。在我的代码中,我只是调用 Logger.Log.Info("blablabla");看来现在我必须尝试其他一些附加程序

以上是关于log4net 消息文本问题的主要内容,如果未能解决你的问题,请参考以下文章

Log4Net“找不到架构信息”消息

log4net:配置为忽略来自特定类的消息

Log4net系列一: asp.net 配置 Log4net 之文本格式输出

Log4net

我们可以在 log4net %property 中设置字符限制为 10 个字符吗?

Log4net:SysLog Appender 示例