如何设置NLog以在Xamarin Forms上创建每小时日志文件



我使用库NLog在Xamarin Forms上编写日志应用程序。我的文件日志按小时写入日志。

示例 :在15点钟,将创建一个名为file_15.txt的文件日志。当在文件名file_15.txt上写入日志时,直到16点,将创建一个文件名为file_16.txt的日志。文件日志名称File_15.txt是删除的日志内容,文件名称File_16.txt的当前日志写在文件日志名称File_15.txt上。

NLog的错误吗?

这是我使用Nlog的代码。

public NLoggerFactory(string folderLog, string version)
{
// Format file
const string dateTimeFormat = "yyyyMMdd.HH";
var fileName = $"Log_v{version}";
// Create targets
// File target
var fileTarget = new FileTarget
{
Name = "FileTarget",
FileName = Path.Combine(folderLog, $"{fileName}.{DateTime.Now.ToString(dateTimeFormat)}.txt"),
Layout = new CsvLayout()
{
Columns =
{
new CsvColumn("Time", @"${date:format=yyyy-MM-dd HH:mm:ss.fff}"),
new CsvColumn("Level", "${level}"),
new CsvColumn("Lessage", "${message}"),
new CsvColumn("Logger", "${logger}")
}
},
ConcurrentWrites = true,
KeepFileOpen = false,
ArchiveFileName = Path.Combine(folderLog, fileName + ".{#}.txt"),
ArchiveNumbering = ArchiveNumberingMode.Date,
ArchiveDateFormat = dateTimeFormat,
ArchiveEvery = FileArchivePeriod.Minute
};
// Console target
var consoleTarget = new ConsoleTarget()
{
Name = "ConsoleTarget",
Layout = @"${date:format=HH:mm:ss} ${logger} ${message}"
};
var config = new LoggingConfiguration();
config.AddTarget(consoleTarget);
config.AddTarget(fileTarget);
// Define rules
var rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget);
config.LoggingRules.Add(rule1);
var rule2 = new LoggingRule("*", LogLevel.Info, fileTarget);
config.LoggingRules.Add(rule2);
// Apply
_logFactory = new LogFactory(config);
}

请帮帮我!

谢谢!

如果使用NLog 4.5(或更新版本(,那么我只会这样做:

var fileTarget = new FileTarget
{
Name = "FileTarget",
FileName = Path.Combine(folderLog, fileName + ".${date:format=" + dateTimeFormat + "}.txt"),
Layout = new CsvLayout()
{
Columns = {
new CsvColumn("Time", @"${date:format=yyyy-MM-dd HH:mm:ss.fff}"),
new CsvColumn("Level", "${level}"),
new CsvColumn("Lessage", "${message}"),
new CsvColumn("Logger", "${logger}")
}
},
ConcurrentWrites = true,
KeepFileOpen = false,
};

因为您已经将日期添加到FileName中,所以不需要配置任何存档选项,因为这是自动发生的(只有在写入静态文件名时才需要存档选项。例如log.txt(

考虑更改为ConcurrentWrites=falseKeepFileOpen=true。它将减少日志记录的开销(不会为每次写入操作打开和关闭文件(。

如果您想让归档逻辑在达到一定大小时创建新文件。然后您可以激活ArchiveAboveSize:

var fileTarget = new FileTarget
{
Name = "FileTarget",
FileName = Path.Combine(folderLog, fileName + ".${date:format=" + dateTimeFormat + "}.txt"),
ArchiveAboveSize = 2000000,
ArchiveFileName = Path.Combine(folderLog, fileName + ".{#}.txt"),
ArchiveNumbering = ArchiveNumberMode.DateAndSequence,
ArchiveDateFormat = dateTimeFormat,
};

最新更新