【问题标题】:log4net - ERROR configuring repository [MyProject] using .config file section (WebService/IIS)log4net - 使用 .config 文件部分 (WebService/IIS) 配置存储库 [MyProject] 时出错
【发布时间】:2020-03-28 19:08:18
【问题描述】:

我有一个 .net dll 配置为在 IIS 下运行的 Web 服务。我添加了 log4Net 日志记录并在 Assembylnfo 下进行了以下设置

[程序集:log4net.Config.XmlConfigurator(ConfigFile = "bin\log4net.config", Watch = true)]

之后,我使用 web.config 中的以下内容启用了 log4net 诊断

<system.diagnostics>   
    <trace autoflush="true">
    <listeners>
      <add
        name="textWriterTraceListener"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="E:\MyLocation\log4net.txt" />
    </listeners>   
</trace> 
</system.diagnostics>
<system.serviceModel>

使用以下部分创建记录器实例。

private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

现在我在 log4net.txt 中获得了以下条目以及许多诊断信息,这些信息显示初始化是否正常并且能够打开日志文件

log4net:使用文件配置存储库 [MYRepository] [E:\MyLocation\bin\log4net.config] 监视文件更新

log4net:打开文件以写入 [...]

此时我能够正确获取日志。现在在上面的初始化日志之后,我得到下面的行到底部

log4net: configuring repository [MYRepository] using .config file section

log4net: Application config file is [E:\MyLocation\web.config]

log4net:ERROR Failed to find configuration section 'log4net' in the application's .config file. Check your .config file for the <log4net> and <configSections> elements. The configuration section should look like: <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

如果初始化成功,如日志顶部所示,为什么 log4net 会尝试在 web.config 中再次检查 web.config 的配置?

【问题讨论】:

  • 您是否在app.config 中启用了&lt;add key="log4net.Internal.Debug" value="true"/&gt;?实际上,您正在尝试做不同的事情,[assembly: log4net.Config.XmlConfigurator(ConfigFile = "bin\log4net.config", Watch = true)] 这里您正在为您的应用程序配置日志,system.diagnostics 启用 log4net 内部调试以监控 log4net 本身的问题
  • @asb 试试下面的答案,谢谢

标签: c# .net iis log4net


【解决方案1】:

在您的项目中包含 log4net,您可以使用 NuGet 包管理器(或者,您也可以手动下载并添加 log4net.dll 引用):

PM> install-package Log4Net

将以下标签添加到 Web.config 文件:

<configuration>
  <configSections>
    [...]
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  [...]
   <log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Logs\FileName.txt"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <maxSizeRollBackups value="5"/>
  <maximumFileSize value="10MB"/>
  <staticLogFileName value="true"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{ISO8601} [%thread] %level %logger %method - %message %exception%newline"/>
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="DEBUG"/>
    <levelMax value="FATAL"/>
  </filter>
</appender>
<root>
  <level value="ALL"/>
  <appender-ref ref="RollingFileAppender"/>
</root>
<logger>
  <level/>
  <appender-ref/>
</logger>

将以下行添加到 AssemblyInfo.cs 文件中:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]

使用以下部分创建记录器实例。

private static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

【讨论】:

    【解决方案2】:

    你能告诉我们你的 log4net.config 文件吗?

    请尝试将以下配置添加到您的配置文件中,并让我们知道您的意见。

     <configSections>
        <!--      Other section configurations go here. For e.g., EF, Elmah..etc    -->
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    
      </configSections>
    
      <log4net>
        <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="C:\MyWebService.log" />
          <param name="AppendToFile" value="true" />
          <param name="RollingStyle" value="Composite" />
          <param name="DatePattern" value="yyyyMMdd" />
          <param name="MaxSizeRollBackups" value="25" />
          <param name="MaximumFileSize" value="1000KB" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
          </layout>
        </appender>
        <root>
          <level value="DEBUG" />
          <appender-ref ref="LogFileAppender" />
        </root>
      </log4net>
    

    如果您有 web.config 文件,那么我建议您在 web 服务的 web.config 文件中包含这些配置设置。

    在相关说明中,如果此答案对您没有帮助,请告诉我,以便我删除答案,其他人可以看到赏金。

    【讨论】:

    • 我已经尝试过了,它确实有效。但它会创建两个日志文件,一个基于 log4net.config,一个基于 web.config。我如何指定使用其中一个?或者这只是一个我应该忽略的警告?
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多