NLog - 日志文件/自动存档太多?

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

我目前正在开发一个使用 NLog 的项目,该协议在日志文件中发送文档。

我希望将所有非错误信息放入文件“sending.json”中,而不会将其清除或存档。然而,由于某种原因,NLog 不断创建编号文件,如“sending1.json”、“sending2.json”,即使未配置为这样做。我在早期版本的 NLog 中有预期的行为,我目前使用的是 5.2.5。

注意:日志文件位置的路径是网络路径,这是否会导致某种文件锁定并且 NLog 尝试通过写入新文件来解决它? (更改日志中提到了从版本 4.x 到 5.2 的一些更改)

此外,应用程序正在作为重新打包的服务工作,一般日志记录正在按预期工作,因此我怀疑这会导致此问题。

我尝试从与归档到目标相关的文档中显式添加一些配置选项并使用旧的 4.2 版本,但没有达到预期效果。

NLog.config:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true">

  <targets>
    <!-- JSON Info Logging -->
    <target name="jsonInfo" xsi:type="File" fileName="\\***\logs\sending.json" enableFileDelete="false" replaceFileContentsOnEachWrite="false" deleteOldFileOnStartup="false">
      <layout xsi:type="JsonLayout">
        ...
      </layout>
    </target>
    <!-- JSON Error Logging -->
    <target name="jsonError" xsi:type="File" fileName="\\***\logs\error.json">
      ...
      </layout>
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Info" maxlevel="Info" writeTo="jsonInfo" />
    <logger name="*" minlevel="Warn" writeTo="jsonError" />
  </rules>
</nlog>

c# .net nlog
1个回答
0
投票

NLog v5 包括几个重大更改。其中之一是更改 FileTarget 的默认值KeepFileOpen=true

写入网络驱动器时,必须显式配置

KeepFileOpen="false"
:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true">

  <targets>
    <!-- JSON Info Logging -->
    <target name="jsonInfo" xsi:type="File" fileName="\\***\logs\sending.json" keepFileOpen="false">
      <layout xsi:type="JsonLayout">
        ...
      </layout>
    </target>
    <!-- JSON Error Logging -->
    <target name="jsonError" xsi:type="File" fileName="\\***\logs\error.json" keepFileOpen="false">
      ...
      </layout>
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Info" maxlevel="Info" writeTo="jsonInfo" />
    <logger name="*" minlevel="Warn" writeTo="jsonError" />
  </rules>

另请参阅:https://github.com/NLog/NLog/wiki/File-target

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