C# Ninject.Extensions.Logging.Log4Net为类/方法名生成不正确的输出

C# Ninject.Extensions.Logging.Log4Net为类/方法名生成不正确的输出,c#,log4net,ninject,ninject-extensions,C#,Log4net,Ninject,Ninject Extensions,我使用3.0.1.10进行依赖注入,并希望使用3.0.1.0进行1.2.11日志记录。然而,当直接使用扩展名而不是log4net时,我在日志文件中得到了不同的输出。我希望输出包含执行日志记录的类/方法的名称,如我的app.config中所示: <log4net> <root> <level value="DEBUG" /> <appender-ref ref="MyConsoleAppender" />

我使用3.0.1.10进行依赖注入,并希望使用3.0.1.0进行1.2.11日志记录。然而,当直接使用扩展名而不是log4net时,我在日志文件中得到了不同的输出。我希望输出包含执行日志记录的类/方法的名称,如我的app.config中所示:

<log4net>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="MyConsoleAppender" />
    </root>

    <appender name="MyConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %-5level %C{1}.%M():%L - %m%n" />
        </layout>
    </appender>
</log4net>

我希望第二行使用
LoggingWithNinject.LogMessage():21
作为源类/方法,但使用Ninject
Log4NetLogger
作为源。如何才能正确识别源?

看来我想要的是不可能的。配置的
%C{1}.%M():%L
部分导致log4net打印调用类的位置信息。在log4net版本中,您调用
Log4NetLogger
,它将您的调用传递到log4net。这意味着源将始终是
Log4NetLogger

作为折衷,我使用了以下方法:

<conversionPattern value="%date [%thread] %-5level %c - %m%n" />

这会丢失调用的方法名和行号,但在使用Ninject扩展时,您确实会获得正确的类名,因为日志记录器总是由
Type
请求,后者默认为类的完整名称空间/名称组合


另一种选择是直接注入
log4net.ILog
,并停止使用Ninject扩展。

目前我正遇到这个问题。这似乎是Ninject.Extensions.Logging功能上的一个巨大漏洞。似乎可以归结为,您可以使用框架和ILOGER接口或正确的stacktrace/类名等进行依赖项注入,并使用ILog接口。是这样还是我遗漏了什么?
2012-06-21 08:25:19,000 DEBUG LoggingWithLog4Net.LogMessage():21 - log4net message
2012-06-21 08:25:19,015 DEBUG Log4NetLogger.Debug():98 - ninject message
<conversionPattern value="%date [%thread] %-5level %c - %m%n" />