首页 > 解决方案 > 如何使用 NLog 保存在两个不同的文件中?

问题描述

我在 MVC 中有一个 Web 应用程序,它使用 NLog 和 Quartz 来运行一些作业。
我需要将作业的日志保存在不同的文件中,但我找不到这样做的方法,因为我只有一个 LogManager 到应用程序。
尝试使用其他目标,但没有成功。
有谁知道该怎么做?
下面是我今天使用的:

var config = new NLog.Config.LoggingConfiguration();
var logfile = new NLog.Targets.FileTarget("logfile") { FileName = ArquivoLog, Name="logfile", CreateDirs = true, Layout = FormatoLog, ArchiveEvery = NLog.Targets.FileArchivePeriod.Day, ArchiveNumbering = NLog.Targets.ArchiveNumberingMode.DateAndSequence, MaxArchiveFiles = 31, WriteFooterOnArchivingOnly = true, KeepFileOpen = true, OpenFileCacheTimeout = 30 };
config.AddRule(LogLevel.Trace, LogLevel.Fatal, logfile);
NLog.LogManager.Configuration = config;

标签: c#.netasp.net-mvcnlogquartz.net

解决方案


要通过 NLog.config 文件执行此操作,请参阅 Andrew Tarasenko 的答案。如果您想在代码中执行此操作,您是否尝试过以下操作?

var config = new NLog.Config.LoggingConfiguration();

var logfile = new NLog.Targets.FileTarget("logfile1") { FileName = ArquivoLog, Name="logfile1", CreateDirs = true, Layout = FormatoLog, ArchiveEvery = NLog.Targets.FileArchivePeriod.Day, ArchiveNumbering = NLog.Targets.ArchiveNumberingMode.DateAndSequence, MaxArchiveFiles = 31, WriteFooterOnArchivingOnly = true, KeepFileOpen = true, OpenFileCacheTimeout = 30 };
var logfile2 = new NLog.Targets.FileTarget("logfile2") { FileName = ArquivoLog, /* Name="NotReallyNeeded as it is already passed in constructor" */, CreateDirs = true, Layout = FormatoLog, ArchiveEvery = NLog.Targets.FileArchivePeriod.Day, ArchiveNumbering = NLog.Targets.ArchiveNumberingMode.DateAndSequence, MaxArchiveFiles = 31, WriteFooterOnArchivingOnly = true, KeepFileOpen = true, OpenFileCacheTimeout = 30 };

config.AddRule(LogLevel.Trace, LogLevel.Fatal, logfile1, "Job1");
config.AddRule(LogLevel.Trace, LogLevel.Fatal, logfile2, "Job2");

NLog.LogManager.Configuration = config;

然后在你的工作中你应该创建一个这样的记录器

var loggerInJob1 = NLog.LogManager.GetLogger("Job1");
var loggerInJob2 = NLog.LogManager.GetLogger("Job2");

有关我添加的 loggerNamePattern 属性,请参阅NLog 文档。

这样,每个作业的日志都会保存到不同的日志文件中。
我个人会选择 NLog.config 方式。这样,无需重新编译代码就可以更轻松地添加新目标(用于新作业)。
但不知道您的解决方案是否可行。


推荐阅读