.net log4net-命名空间的独立附加器

.net log4net-命名空间的独立附加器,.net,log4net,.net,Log4net,我一直在谷歌上搜索,但还没有找到我问题的答案。 我有我的应用程序,我有一个客户端库将我连接到一个数据库(在我的例子中,它是RavenDb)。 我希望RavenDb客户端消息转到一个单独的文件(这意味着,来自Raven.Client.Xyz类实例的所有消息都应记录到Raven-Client.log文件中-客户端库执行的操作,例如连接到服务器、等待响应、获取/更新文档、查询索引等,而不是我的代码与客户端库交互时执行的操作。)。我如何才能做到这一点?我尝试了单独的appender,但随后RavenDb

我一直在谷歌上搜索,但还没有找到我问题的答案。 我有我的应用程序,我有一个客户端库将我连接到一个数据库(在我的例子中,它是RavenDb)。
我希望RavenDb客户端消息转到一个单独的文件(这意味着,来自Raven.Client.Xyz类实例的所有消息都应记录到Raven-Client.log文件中-客户端库执行的操作,例如连接到服务器、等待响应、获取/更新文档、查询索引等,而不是我的代码与客户端库交互时执行的操作。)。我如何才能做到这一点?我尝试了单独的appender,但随后RavenDb日志也出现在我的应用程序记录器中。

我使用的是xml配置,log4net版本是1.2.10

您的做法是正确的。创建一个单独的附加器,然后使用如下代码选择一个特定的附加器,而不是抓取主记录器:

ILog ravenLog = LogManager.GetLogger("RavenDbAppenderName");

ILog nonRavenLog = Logmanager.GetLogger("Other appender name");

然后将相应的
ILog
传递到代码中的每个位置。

事实上,我刚刚检查过,此解决方案有效:

<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%utcdate [%thread] %-3level %logger - %message%newline" />
        </layout>
    </appender>

    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="application.log" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <datePattern value="yyyyMMdd" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="1MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%utcdate [%thread] %-3level %logger - %message%newline" />
        </layout>
    </appender>

    <appender name="RavenClientFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="ravendb-client.log" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <datePattern value="yyyyMMdd" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="1MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%utcdate [%thread] %-3level %logger - %message%newline" />
        </layout>
    </appender>

    <logger name="Raven.Client" additivity="false">
        <level value="debug" />        
        <appender-ref ref="RavenClientFileAppender" />
    </logger>

    <root>
        <level value="debug" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>


对不起,各位,我的回答是正确的,我想我还不够清楚。我不想记录我的代码如何使用RavenDb客户端-我想记录客户端本身正在做什么(例如连接到服务器、获取/更新文档、等待响应等)我更新了question@chester89等等,你想重定向你正在使用的库自己生成的日志以使用log4net appender吗?不太清楚-RavenDb客户端知道如何写入日志,只需要正确配置它。请参阅我的答案