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

时间:2018-11-17 09:42:26

标签: c# xamarin xamarin.forms nlog

我使用图书馆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);
    }

请帮助我!

谢谢!

1 个答案:

答案 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}})

请考虑更改为FileNamelog.txt。它将减少日志记录的开销(无需为每次写操作打开和关闭文件)。

如果要使归档逻辑在达到一定大小时创建新文件。然后,您可以激活ConcurrentWrites=false

KeepFileOpen=true