压缩前一个日志时,NLog 是否会阻止日志记录?

问题描述 投票:0回答:1

我们的应用程序使用 NLog 进行日志记录。 日志记录是同步执行的。每天都会创建一个新的日志文件。日志压缩已启用。日志配置以编程方式完成:

logfile = new FileTarget("debuglogfile")
            {
                FileName = Path.Combine(logDirectory, "debug.log"),
                KeepFileOpen = true,
                ConcurrentWrites = true,
                EnableArchiveFileCompression = true,
                ArchiveEvery = FileArchivePeriod.Day,
                MaxArchiveFiles = 10,
                ArchiveNumbering = ArchiveNumberingMode.Date,
                Encoding = Encoding.UTF8                
            };
config.AddRuleForAllLevels(logfile);

通常,我们的应用程序每秒执行大约 50 个日志条目。一天的日志大小约为2GB。显然,这样的日志的压缩需要相当长的时间。 在一天开始时,当执行前一天的日志压缩时,我们会看到日志条目之间有一两分钟的间隙。同时,应用程序不执行其功能。看起来应用程序线程在写入日志时被阻塞。 但如果我们禁用压缩,程序就可以正常工作。

详情: NLog版本:5.2.7 目标框架:net7.0 操作系统:Ubuntu

  1. 请澄清在压缩前一个日志时日志记录是否被阻止。
  2. 如果是,应该怎样做才能使程序能够在压缩前一个日志的同时写入新日志。
nlog
1个回答
0
投票

是的,启用

EnableArchiveFileCompression = true
后,NLog FileTarget 将为每个 LogEvent 检查是否需要存档操作,并在存档操作中执行文件压缩。归档操作完成后,会将 LogEvent 写入新文件。

如果文件压缩时间较长,则会延迟LogEvent的写入。如果 Nlog FileTarget 在没有 NLog AsyncWrapper 的情况下被调用为同步,那么应用程序线程将被阻塞,直到文件压缩完成。

也许考虑设置计划任务/cron-job 来执行文件压缩,而不是依赖于 NLog FileTarget。或者只为存档文件夹启用 NTFS 压缩。

© www.soinside.com 2019 - 2024. All rights reserved.