我使用图书馆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);
}
请帮助我!
谢谢!
答案 0 :(得分:1)
如果使用NLog 4.5(或更高版本),那么我会这样做:
+------+--------+-------+----------+-----+
| Week | ItemNr | Begin | Increase | End |
+------+--------+-------+----------+-----+
| 1 | 1001 | 100 | -10 | 90 |
| 2 | 1001 | | 0 | |
| 3 | 1001 | 90 | 0 | 90 |
| 4 | 1001 | | 20 | |
| 5 | 1001 | | 100 | |
| 6 | 1001 | | -20 | |
| 7 | 1001 | | 0 | |
| 8 | 1001 | 200 | 10 | 210 |
| 9 | 1001 | | 0 | |
| 10 | 1001 | | -50 | -50 |
| 11 | 1001 | | 0 | |
+------+--------+-------+----------+-----+
由于您已将日期添加到 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,
};
中,因此您无需配置任何存档选项,因为它会自动发生(仅当写入静态文件名时才需要存档选项。例如{ 1}})
请考虑更改为FileName
和log.txt
。它将减少日志记录的开销(无需为每次写操作打开和关闭文件)。
如果要使归档逻辑在达到一定大小时创建新文件。然后,您可以激活ConcurrentWrites=false
:
KeepFileOpen=true