C# 为每个appender创建不同的log4net.ILog实例

C# 为每个appender创建不同的log4net.ILog实例,c#,asp.net,.net,log4net,appender,C#,Asp.net,.net,Log4net,Appender,我正在使用log4net记录一个项目 我想登录到3个不同的文件:请求、响应和错误 <log4net debug="true"> <!--To turn off an appender, simply set it's threshold value to "OFF"--> <appender type="log4net.Appender.RollingFileAppender" name="RequestAppender"> &

我正在使用log4net记录一个项目

我想登录到3个不同的文件:请求、响应和错误

<log4net debug="true">
    <!--To turn off an appender, simply set it's threshold value to "OFF"-->
    <appender type="log4net.Appender.RollingFileAppender" name="RequestAppender">
        <file value="requests.txt" />
        <threshold value="INFO" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
        </layout>
    </appender>

    <appender type="log4net.Appender.RollingFileAppender" name="ResponseAppender">
        <file value="responses.txt" />
        <threshold value="INFO" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
        </layout>
    </appender>

    <appender type="log4net.Appender.RollingFileAppender" name="ErrorAppender">
        <file value="errors.txt" />
        <threshold value="ERROR" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
        </layout>
    </appender>

</log4net>
但这并没有指定appenderName,我也没有找到指定它的方法

有什么想法吗

谢谢

编辑: 我想我遗漏了一些东西,因为我的配置文件中没有定义。我不明白伐木工人和附加工人之间的区别

编辑#2:
我注意到一些奇怪的事情。在多个3记录器配置之前,我有一个1记录器配置。现在,我在3个记录器中写入的内容会写入该日志文件,尽管它不再在配置文件中。由于某些原因,它不会加载新的配置文件。我如何强制它这样做?

要使用您想要的名称,您可以创建3个记录器:

 private static readonly log4net.ILog logError = log4net.LogManager.GetLogger("ErrorAppender");
 private static readonly log4net.ILog logResponse = log4net.LogManager.GetLogger("ResponseAppender");
 private static readonly log4net.ILog logRequest = log4net.LogManager.GetLogger("RequestAppender");
记录日志消息时,必须使用正确的记录器。您的Appender配置为在单独的文件中处理每个记录器

当前代码的问题是:

System.Reflection.MethodBase.GetCurrentMethod().DeclaringType

由于使用静态记录器,记录器名称可能无法正确格式。没有
System.Reflection.MethodBase.GetCurrentMethod()
,因为调用静态初始化时没有
GetCurrentMethod
。您可以将其更改为
typeof(..).Name
。但是,您需要重新配置附加程序来记录类名。

我想这就是您要找的,我也这么认为,语法似乎还可以,但不起作用。它的编译和运行都很好。但是,所有记录器的所有IsLevel Enabled成员都设置为TRUE,即使它们不是这样设置的,并且我编写的测试日志没有被记录。试试这个-我有两个问题:1)读了一点之后,我注意到我没有在配置中定义元素。我应该用a来定义a吗?2) 现在,我注意到,使用内部log4net调试,我的新配置文件根本不需要,它仍然使用旧的配置!我对logError、logResponse和logRequest所做的所有写入都被发送,就好像它们是使用我以前使用的旧记录器发送的一样(它们被写入我以前使用的log.txt文件)。我试图清理我的项目,但它仍然不起作用。请注意,
System.Reflection.MethodBase.GetCurrentMethod()。DeclaringType
在这种情况下起作用。。。它的求值类型是记录器在其中声明的类的类型。因此,您最终得到了一个类似于
MyCorp.MyClass
的记录器名称,而不是您想要的
ErrorAppender
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType