【问题标题】:Send ALL messages to one log file, and RavenDB logs to a different log file将所有消息发送到一个日志文件,并将 RavenDB 日志发送到另一个日志文件
【发布时间】:2013-04-20 17:31:47
【问题描述】:

这听起来微不足道,但我不知何故无法做到。我有以下NLog.config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="true">
    <variable name="logDirectory" value="${basedir}/App_Data/logs"/>
    <targets>
        <target name="file" xsi:type="AsyncWrapper">
            <target xsi:type="File" name="f1" fileName="${logDirectory}\log1.txt" layout="${longdate} ${callsite} ${level} ${message} (File 1)"/>
        </target>

        <target xsi:type="File" name="fileGeneral" fileName="${logDirectory}\log_${shortdate}.txt" >
            <layout xsi:type="Log4JXmlEventLayout"/>
        </target>
        <target xsi:type="File" name="fileRaven" fileName="${logDirectory}\raven_${shortdate}.txt" >
            <layout xsi:type="Log4JXmlEventLayout"/>
        </target>



    </targets>
    <rules>
        <logger name="Raven.*" minlevel="Trace" writeTo="fileRaven"></logger>
        <logger name="*" minlevel="Trace" writeTo="fileGeneral"></logger>

    </rules>
</nlog>

这最终将 Raven + ALL 日志记录到“log_[date].txt”,而 RavenDB 的另一个副本记录在“raven_[date].txt”。这应该怎么做?

【问题讨论】:

    标签: c# logging nlog


    【解决方案1】:
    <logger name="Raven.*" minlevel="Trace" writeTo="fileRaven" final="true"></logger> 
    

    final="true" 表示不再执行Raven.* 的规则将按照您的要求执行(如果我理解正确的话)。

    【讨论】:

    • 只要 Raven.* 记录器出现在 * 记录器上方,应该没有区别
    【解决方案2】:

    很遗憾,这是不可能的。

    原因是记录器是从上到下评估的,第一个匹配的会被使用,下面的不会被评估。

    在您的情况下,这意味着在记录任何与 Raven 相关的内容时,将使用第一个记录器并停止流程。

    【讨论】:

    • 是的,根据答案是可能的。现在看到它是有道理的,因为我可能想将 Raven 查询记录到文件中,以及要跟踪的所有内容,包括 Raven。这样,两者皆有可能。
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多