检查 NLog 中是否发生日志事件

本文关键字:生日 日志 事件 是否 NLog 检查 | 更新日期: 2023-09-27 17:56:23

我正在尝试检查我的应用程序中是否发生了日志事件,以及它是否做了什么。

我已经检查了所有地方,似乎找不到有关日志事件是否发生的任何信息。

private static Logger logger = LogManager.GetCurrentClassLogger();
logger.Info("Info Log Message");
if(logger.event == true)
{
    //an log even happen this run
}

检查 NLog 中是否发生日志事件

看起来您可以使用MethodCall目标来实现此目的。

可以将目标条目添加到NLog.config文件,该条目会将日志事件定向到其中一个类中的静态方法。有关如何执行此操作的更多详细信息,请参阅文档。

您也可以直接在代码中执行此操作,如下所示(此处从文档中复制的示例):

using NLog;
using NLog.Targets;
using System.Diagnostics;
public class Example
{
    public static void LogMethod(string level, string message)
    {
        Console.WriteLine("l: {0} m: {1}", level, message);
    }
    static void Main(string[] args)
    {
        MethodCallTarget target = new MethodCallTarget();
        target.ClassName = typeof(Example).AssemblyQualifiedName;
        target.MethodName = "LogMethod";
        target.Parameters.Add(new MethodCallParameter("${level}"));
        target.Parameters.Add(new MethodCallParameter("${message}"));
        NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug);
        Logger logger = LogManager.GetLogger("Example");
        logger.Debug("log message");
        logger.Error("error message");
    }
}

我刚刚意识到,如果您只想检查是否调用了特定的记录器,我的回答可能无法回答您的问题。如果是这样,则可以使用规则仅从特定记录器获取事件,如文档的特定于记录器的路由部分所示。

您需要向NLog.config<rules>部分添加一个引用您定义的目标的条目。我不知道是否有办法在代码中设置目标并将其与此规则相结合。您可能必须在配置文件中定义目标:

<targets>
    <target name="logfile" xsi:type="File" fileName="file.txt" />
</targets>
<rules>
    <logger name="SomeNamespace.Component.*" minlevel="Trace" writeTo="logfile" final="true" />
    <logger name="*" minlevel="Info" writeTo="logfile" />
</rules>