查看NLog中是否发生日志事件
Check to see if an log event occurs in NLog
我正在尝试检查我的应用程序中是否发生了日志事件,以及它是否执行了某些操作。
我到处都检查过了,似乎找不到任何关于日志事件是否发生的信息。
private static Logger logger = LogManager.GetCurrentClassLogger();
logger.Info("Info Log Message");
if(logger.event == true)
{
//an log even happen this run
}
看起来您可以使用 MethodCall
目标来完成此操作。
您可以将目标条目添加到 NLog.config
文件,将日志事件定向到 类 之一中的静态方法。有关如何执行此操作的更多详细信息,请参阅 documentation。
您也可以直接在代码中执行,如下所示(示例从文档中复制到此处):
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");
}
}
我刚刚意识到如果您只想检查是否调用了特定的记录器,我的回答可能无法回答您的问题。如果是这样,您可以使用规则仅从特定记录器获取事件,如文档的 Logger-specific routing 部分所示。
您需要在 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>
我正在尝试检查我的应用程序中是否发生了日志事件,以及它是否执行了某些操作。
我到处都检查过了,似乎找不到任何关于日志事件是否发生的信息。
private static Logger logger = LogManager.GetCurrentClassLogger();
logger.Info("Info Log Message");
if(logger.event == true)
{
//an log even happen this run
}
看起来您可以使用 MethodCall
目标来完成此操作。
您可以将目标条目添加到 NLog.config
文件,将日志事件定向到 类 之一中的静态方法。有关如何执行此操作的更多详细信息,请参阅 documentation。
您也可以直接在代码中执行,如下所示(示例从文档中复制到此处):
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");
}
}
我刚刚意识到如果您只想检查是否调用了特定的记录器,我的回答可能无法回答您的问题。如果是这样,您可以使用规则仅从特定记录器获取事件,如文档的 Logger-specific routing 部分所示。
您需要在 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>