Log4net 是否允许记录器覆盖特定appender的参数?

Log4net 是否允许记录器覆盖特定appender的参数?,log4net,log4j,Log4net,Log4j,使用log4net,我可以配置一个记录器,以便它可以覆盖其中一个appender的单个参数吗?一些例子: <log4net> <appender name="A1" type="log4net.Appender.FileAppender"> <file value="log4net.log"> </appender> <root> <level value="ERROR" /> <a

使用log4net,我可以配置一个记录器,以便它可以覆盖其中一个appender的单个参数吗?一些例子:

<log4net>
  <appender name="A1" type="log4net.Appender.FileAppender">
    <file value="log4net.log">
  </appender>
  <root>
    <level value="ERROR" />
    <appender-ref ref="A1" />
  </root>
  <logger name="MyLogger">
    <level value="WARN" />
    <appender-ref ref="A1">
      <file value="MyLogger.Log"/>
    </appender-ref>
  </logger>
</log4net>
        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>

    <appender name="MyLogger" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="MyLogger.Log" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="INFO" />
        <appender-ref ref="A1" />
    </root>

    <logger name="SpecialMethod">
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </logger>

</log4net
例如,我想将我的一个子记录器配置为将输出发送到与应用程序其余部分不同的文件。我走错方向了吗?我应该配置一个新的appender吗?向不同的附加器发送不同的级别如何?e、 g

<log4net>
  <appender name="default" type="log4net.Appender.FileAppender">
    <file value="My.log">
  </appender>
  <appender name="errors" type="log4net.Appender.FileAppender">
    <file value="Errors.log">
  </appender>
  <root>
    <level value="DEBUG">
      <appender-ref ref="default" />
    </level>
    <level value="ERROR">
      <appender-ref ref="errors" />
    </level>
  </root>
</log4net>
        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>

    <appender name="MyLogger" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="MyLogger.Log" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="INFO" />
        <appender-ref ref="A1" />
    </root>

    <logger name="SpecialMethod">
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </logger>

</log4net

我使用类似于您的第一个xml文件的东西。使用Log4net进行C

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>

    <appender name="MyLogger" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="MyLogger.Log" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="INFO" />
        <appender-ref ref="A1" />
    </root>

    <logger name="SpecialMethod">
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </logger>

</log4net
不要认为第二个xml会起作用,因为据我所知,它会解释为将日志记录级别设置为调试,而您希望它解释为调试

  if (Level == DEBUG) ...
        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>

    <appender name="MyLogger" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="MyLogger.Log" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="INFO" />
        <appender-ref ref="A1" />
    </root>

    <logger name="SpecialMethod">
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </logger>

</log4net

我添加了这个作为一个新的答案,因为它太长了,不适合在评论中

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>

    <appender name="MyLogger" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="MyLogger.Log" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="INFO" />
        <appender-ref ref="A1" />
    </root>

    <logger name="SpecialMethod">
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </logger>

</log4net
试试像这样的东西

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>

    <appender name="MyLogger" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="MyLogger.Log" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="INFO" />
        <appender-ref ref="A1" />
    </root>

    <logger name="SpecialMethod">
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </logger>

</log4net

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>

    <appender name="MyLogger" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="MyLogger.Log" />

        <appendToFile value="true" />

        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]%date&#13;&#10;" />
            <footer value="[Footer]%date&#13;&#10;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="INFO" />
        <appender-ref ref="A1" />
    </root>

    <logger name="SpecialMethod">
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </logger>

</log4net

它是如何工作的?语法就是这样吗?当我尝试它时,它似乎对我没有任何影响。是的,看起来这是最接近的,放了多个附加器。但它仍然不能帮助重现这样一种情况,即调试/信息消息进入一个日志,错误进入另一个日志……就像apache的http和错误日志一样。