如何在 nlog 和 nxlog 之间设置容错通道?
How to set a fault tolerante channel between nlog and nxlog?
我的应用程序使用 nlog。它需要将日志发送到同一主机(我也可以控制)中的 nxlog 进程 运行。
我考虑使用 TCP 或 UDP 从 nlog 向 nxlog 发送 json 行。这是一个简单的设计,但它不是容错 AFAIK。如果 nxlog 暂时关闭,nlog 甚至可能会继续重试,但如果我的应用程序在那一刻退出,日志消息就会丢失。
或者我可以设置 nlog 文件目标来写入 json 行。它将用作持久缓冲区。 Nxlog 将从该文件中读取。问题变成了如何设置文件滚动设置。如果我不设置滚动,nlog 可能会在 nxlog 读取最后的日志行之前截断文件。如果我设置滚动,nxlog 会将新的存档文件视为一组新的日志,并且 "replay" 它们会生成重复项。
所以,我的问题是:如何将 nlog 和 nxlog 设置为容错并防止重复?
如果您配置 nlog 每天创建一个日志,即日志文件是在文件名中使用日期创建的并且不会滚动,那么 nxlog 将能够提取文件并且不会有重复文件。
我采纳了 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)。
我的应用程序使用 nlog。它需要将日志发送到同一主机(我也可以控制)中的 nxlog 进程 运行。
我考虑使用 TCP 或 UDP 从 nlog 向 nxlog 发送 json 行。这是一个简单的设计,但它不是容错 AFAIK。如果 nxlog 暂时关闭,nlog 甚至可能会继续重试,但如果我的应用程序在那一刻退出,日志消息就会丢失。
或者我可以设置 nlog 文件目标来写入 json 行。它将用作持久缓冲区。 Nxlog 将从该文件中读取。问题变成了如何设置文件滚动设置。如果我不设置滚动,nlog 可能会在 nxlog 读取最后的日志行之前截断文件。如果我设置滚动,nxlog 会将新的存档文件视为一组新的日志,并且 "replay" 它们会生成重复项。
所以,我的问题是:如何将 nlog 和 nxlog 设置为容错并防止重复?
如果您配置 nlog 每天创建一个日志,即日志文件是在文件名中使用日期创建的并且不会滚动,那么 nxlog 将能够提取文件并且不会有重复文件。
我采纳了 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)。