我的应用程序使用nlog。它需要将日志发送到在同一主机(我也可以控制)中运行的nxlog进程。
我想过使用TCP或UDP从nlog到nxlog发送json行。这是一个简单的设计,但它不是容错的AFAIK。如果nxlog暂时中断,nlog甚至可能会继续重试,但如果我的应用程序在此时退出,则日志消息将丢失。
或者我可以设置nlog文件目标来写入json行。它将作为持久缓冲区工作。 Nxlog将从该文件中读取。问题变成了如何设置文件滚动设置。如果我没有设置滚动,nlog可能会在nxlog读取最后一个日志行之前截断文件。如果我设置滚动,nxlog会将新的归档文件视为一组新的日志,并且"重播"他们生成重复。
所以,我的问题是:如何设置nlog和nxlog是容错的并防止重复?
答案 0 :(得分:1)
如果您将 nlog 配置为每天创建一个日志,即使用文件名中的日期创建日志文件但未滚动,则 nxlog 将能够拿起文件,不会有重复。
答案 1 :(得分:0)
我接受了b0ti的建议并想出了:
C:\Logs\file.{#}.log
Nxlog仅监视已归档的文件: <soapenv:Body>
<cus:get_customer_info soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<GetCustomerInfoRequest xsi:type="soap:GetCustomerInfoRequest" xmlns:soap="http://schemas.xxxxxxxxxxxx">
<i_customer xsi:type="xsd:int">The id of customer</i_customer>
</GetCustomerInfoRequest>
</cus:get_customer_info>
</soapenv:Body>
NLog将每分钟为Nxlog添加一个新文件,或者每当它变得足够大时(上例中为2MB)。在我的情况下,这是可以接受的延迟。
如果我的应用程序记录不多,它会保留1小时的日志。如果它像疯了一样记录,历史将会更短但不会超过122MB(2 + 2 * 60)。