C# 如何设置NLog以在Xamarin表单上创建每小时日志文件?
我使用图书馆 在Xamarin表单上编写日志应用程序。 我的文件日志按小时写日志 示例:15点钟时,将创建一个文件日志名file_15.txt。 在文件namefile_15.txt上写入日志时,直到16点钟,将创建一个文件log namefile_16.txt。文件log namefile_15.txt是删除的日志内容,文件namefile_16.txt的当前日志写在文件log namefile_15.txt上 这是NLog的错误吗 这是我的代码使用C# 如何设置NLog以在Xamarin表单上创建每小时日志文件?,c#,xamarin,xamarin.forms,nlog,C#,Xamarin,Xamarin.forms,Nlog,我使用图书馆 在Xamarin表单上编写日志应用程序。 我的文件日志按小时写日志 示例:15点钟时,将创建一个文件日志名file_15.txt。 在文件namefile_15.txt上写入日志时,直到16点钟,将创建一个文件log namefile_16.txt。文件log namefile_15.txt是删除的日志内容,文件namefile_16.txt的当前日志写在文件log namefile_15.txt上 这是NLog的错误吗 这是我的代码使用Nlog public NLogge
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,
};
由于您已将日期添加到文件名
,因此无需配置任何存档选项,因为这是自动进行的(仅当写入静态文件名.Exlog.txt时才需要存档选项)
考虑更改为ConcurrentWrites=false
和KeepFileOpen=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,
};
@RoftKristensen,这是完美的工作。但我有一个问题,当我写日志14h->20h时,只有3个小时的文件日志(18、19、20)被删除,文件日志(14、15、16、17)被删除。这是Nlog的错误?不知道为什么文件会被删除。NLog仅在配置maxArchiveFiles
时删除文件。您可以尝试检查NLog我想要检查文件日志的大小。如果文件大小>2MB,我将在文件日志名称后创建一个新的文件日志(添加字符“_1”、“_2”等)。如何在NLOg中处理它?@BillNguyen添加了如何使用ArchiveAboveSize的示例。但是文档总是一个好的开始:这是工作,@RoftKristensen,你是图书馆NLOg的大师,LOL:D