Log4Net Layout.XmlLayout 不会在 .NET Core 平台中创建日志

jac*_*k_t 2 c# log4net .net-core

我已经为我的应用程序实现了记录器,我想在 .NET Core 控制台应用程序上以 XML 格式 (XmlLayout) 记录活动。Log4Net 配置包括 FileAppender 和 XmlFileAppender,如下所示。

<log4net>
  <appender name="FileAppender" type="log4net.Appender.FileAppender">
  <file value="C:\Log4NetLogs\UaGatewayText.log.txt"/>
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%date{dd.MM.yyyy}] [%date{ABSOLUTE}] [%thread] 
     %level %property{TEST - Ua.Gateway} %message%newline" />

     </layout>
        </appender>
           <appender name="ConsolAppender" 
                            type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%dae{DATE}] [%date{ABSOLUTE}] [%thread] 
                  [%level] %message%newline" />
      </layout>
   </appender>


    <appender name="XmlFileAppender" 
               type="log4net.Appender.RollingFileAppender">
           <file type="log4net.Util.PatternString" 
                value="C:\Log4NetLogs\UaGatewayXml.log.xml" />
        <appendToFile value= "true" />
        <rollingStyle value="size"/>
        <maximumFileSize value ="50MB"/>
        <maxSizeRollBackups value ="10"/>
       <layout type="log4net.Layout.XmlLayout" />
    </appender>


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

   </root>

 </log4net>
Run Code Online (Sandbox Code Playgroud)

在 .NET Core Console App 中,XmlAppender 在目录下创建 UaGatewayXml.log.xml 文件,不写入任何日志。但是,它适用于 FileAppender。

上述配置对于 XmlFileAppender 和 FileAppender 的 .NET Framework (4.5.*) 都按预期工作。

我是否必须在配置文件中进行任何更改?谢谢

小智 7

问题在于log4net.Layout.XmlLayoutSchemaLog4j它使用了writer.WriteStartElement("log4j:event");导致验证错误的方法。

您可以创建自己的布局(以代码从这里点击这里

只是改变

writer.WriteStartElement("log4j:event")
Run Code Online (Sandbox Code Playgroud)

进入

writer.WriteStartElement("log4j", "event", "log4j");
Run Code Online (Sandbox Code Playgroud)

此方法采用前缀、元素名称和命名空间。我已经在YALV 中打开了输出XML文件,一切正常。不要忘记纠正所有方法。WriteStartElement

在这里写了这个解决方案。