1

我正在使用 Common.Logging.Log4Net.Universal 以 xml 格式编写日志,以便我可以使用 YALV 读取它!但是,我看不到为此生成的日志。我已经将这种技术用于普通的 log4net 库并且可以正常工作。这是我的“web.config”文件中的相关配置:

 <configSections>
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Universal.Log4NetFactoryAdapter, Common.Logging.Log4Net.Universal" >
        <arg key="configType" value="FILE"/>
        <arg key="configFile" value="~/log4net.config" />
      </factoryAdapter>
    </logging>
  </common>

这是我的“log4net.config”文件:

<configuration>
    <log4net>
      <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="C://Logs//mylogfile.xml" type="log4net.Util.PatternString"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
          <locationInfo value="true"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
            <levelMax value="FATAL" />
          </filter>
      </appender>
      <root>
        <level value="ALL"/>
        <appender-ref ref="FileAppender"/>
      </root>
  </log4net>
</configuration>

下面是实际生成日志的代码:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace MyNamespace
{
    public class HomeController : Controller
    {
        private static readonly ILog Log = new Log4NetFactoryAdapter().GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        public ActionResult Index()
        {
            Log.Error(m=>m("My First Logs"));
            return View();
        }
    }
}

执行后,代码执行没有任何错误,但是上面提到的“mylogfile.xml”永远不会生成。

请建议,以防有人尝试过同样的方法。

4

1 回答 1

2

当我查看通用日志记录项目的 GitHub 源代码时,我看到 web.config 的以下配置:

<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="common">
  <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
</sectionGroup>
</configSections>
<common>
<logging>
  <factoryAdapter type="Common.Logging.Log4Net.Universal.Log4NetFactoryAdapter, Common.Logging.Log4Net.Universal" />
</logging>
 </common>
 </configuration>

然后您应该从“log4net.config”文件中删除配置根元素:

<log4net>
  <appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="C://Logs//mylogfile.xml" type="log4net.Util.PatternString"/>
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
      <locationInfo value="true"/>
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="FATAL" />
      </filter>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="FileAppender"/>
  </root>
</log4net>

如果这不起作用,请为 log4net 启用调试以查看您的配置出了什么问题。

于 2017-01-24T09:20:27.520 回答