【问题标题】:Where is the log file in log4net?log4net 中的日志文件在哪里?
【发布时间】:2016-02-01 19:13:50
【问题描述】:

我在一个 asp.net mvc 应用程序的 Web.config 文件中有以下条目:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    ...
  </configSections>

  <log4net>
    <appender name="PublicAccessAppender" type="log4net.Appender.RollingFileAppender">
      <datePattern value="'C:\Users\my_user_name\Documents\Temp\logs\public-access.'yyyy-MM-dd'.log'" />
      <staticLogFileName value="false" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="5" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <appender-ref ref="PublicAccessAppender" />
    </root>
  </log4net>

  ...
</configuration>

我希望我想要实现的目标是不言自明的,但是当我运行应用程序(托管在 IIS 中)时,我没有得到任何日志文件。 FWIW,目录层次结构存在于 Temp 文件夹中,我希望 log4net 生成路径中的其余目录/文件。

我已将 log4net nuget 包添加到我的应用程序中,并且正在使用 INFO 级别进行日志记录。

我在这里错过了什么?

【问题讨论】:

  • 你是如何配置 log4net 的?
  • 其实我根本没有配置log4net,我相信这是我问题的根源。
  • 在你的启动方法中添加对XmlConfigurator.Configure()的调用
  • 我认为肯定会解决它,但仍然没有骰子。我什至尝试打开配置调试,但还是不行。它只是默默地驶过我尝试做的所有事情。
  • 配置log4net后可以check for configuration errors

标签: asp.net-mvc log4net


【解决方案1】:

我认为您不能将完整路径放入datePattern,必须只有YYYYmmdd 之类的东西。将文件路径放入file元素:

<file value="C:\Users\my_user_name\Documents\Temp\logs\public-access.log" />
<datePattern value="yyyyMMdd" />
<preserveLogFileNameExtension value="true" />

最后一个元素强制将 datePattern 放在 .log 扩展之前,这可能是您最初的目标..

【讨论】:

  • 这是正确的答案 - DatePattern 只接受日期模式。 OP 没有像上面的 cmets 那样配置 log4net。但是,如果文件值更改为 &lt;file type="log4net.Util.PatternString" value="C:\temp\my_user_name\Documents\Temp\logs\public-access.%date{yyyyMMdd}.log" /&gt;,则输出文件名中仍然包含日期。也为preserveLogFileNameExtension+1
【解决方案2】:

这是有效的附加程序配置:

<appender name="PublicAccessAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\temp\my_user_name\Documents\Temp\logs\app.log" />
  <datePattern value=".yyyy-MM-dd" /><!-- can be omitted as it's the default datePattern value -->
  <rollingStyle value="Date" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>

注意对 log4net 配置有困难的读者:在 IIS 中托管的 asp.net 几乎有 0 个写入权限,因此您最可能遇到的问题是您的 Web 应用程序根本没有写入日志的权限文件。

这就是发生在我身上的事情,我在调用.Configure() 后在调试器中检查log4net.LogManager.GetRepository().ConfigurationMessages 的内容时注意到了这一点。

我关注this post 为我的网络应用程序授予写入日志文件所需的权限(即读/写/修改)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多