0

我的应用程序使用 nlog。它需要将日志发送到在同一主机上运行的 nxlog 进程(我也可以控制)。

我想过使用 TCP 或 UDP 从 nlog 向 nxlog 发送 json 行。这是一个简单的设计,但它不是容错 AFAIK。如果 nxlog 暂时关闭,nlog 甚至可能会继续重试,但如果我的应用程序在那一刻退出,日志消息就会丢失。

或者,我可以设置 nlog 文件目标以写入 json 行。它将作为持久缓冲区工作。Nxlog 将从该文件中读取。问题变成如何设置文件滚动设置。如果我不设置滚动,nlog 可能会在 nxlog 读取最后的日志行之前截断文件。如果我设置滚动,nxlog 会将新归档文件视为一组新日志并“重播”它们以生成重复项。

所以,我的问题是:如何将 nlog 和 nxlog 设置为容错并防止重复?

4

2 回答 2

1

如果您将nlog配置为每天创建一个日志,即使用文件名中的日期创建日志文件并且不滚动,那么nxlog将能够拾取文件并且不会有重复。

于 2015-05-16T15:06:37.227 回答
0

我接受了 b0ti 的建议并提出:

var file = new FileTarget
{
    FileName = @"C:\Logs\file.log",
    ArchiveFileName = @"C:\Logs\file.{#}.log",

    ArchiveEvery = FileArchivePeriod.Minute,
    ArchiveAboveSize = 2 * 1024 * 1024,  // 2MB.

    ArchiveNumbering = ArchiveNumberingMode.Sequence,
    MaxArchiveFiles = 60,
};

Nxlog 只监视归档文件:C:\Logs\file.{#}.log

NLog 将每分钟或当它变得足够大时(在上面的示例中为 2MB)为 Nxlog 添加一个新文件。就我而言,这是可以接受的延迟。

如果我的应用程序记录不多,它会保留 1 小时的日志。如果它疯狂地记录,历史记录会更短,但不会超过 122MB (2 + 2 * 60)。

于 2015-05-18T14:42:14.693 回答