log4net - 命名空间的单独appender

时间:2016-08-08 12:30:37

标签: .net log4net

我一直在谷歌搜索但尚未找到我的问题的答案。 我有我的应用程序,我有一个客户端库将我连接到数据库(在我的情况下,它是RavenDb)。
我希望RavenDb客户端消息转到一个单独的文件(意味着,来自Raven.Client.Xyz类实例的所有消息都应记录到raven-client.log文件 - 客户端库执行的操作,例如连接到服务器,等待响应,获取/更新文档,查询索引等不是我的代码与客户端库交互的)。我怎样才能做到这一点?我尝试了单独的appender,但是RavenDb日志也出现在我的应用程序记录器中。
我使用的是xml配置,log4net版本是1.2.10

2 个答案:

答案 0 :(得分:2)

实际上,我刚检查过,这个解决方案有效:

<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>

对不起大家,我

的正确轨道上

答案 1 :(得分:0)

你走在正确的轨道上。创建一个单独的appender,然后使用以下代码选择一个特定的appender,而不是抓住主记录器:

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

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

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