我碰到这个问题来了我自己,我花了很长时间才弄明白。 我发现的大部分答案只有解决方案的一部分,并没有解释如何/为什么它的工作原理......这使得如果你有一个稍微不同的用例很难适应。
例:
<target name="log"
xsi:type="File"
fileName="${basedir}/logs/log.${longdate:cached=true}.log"
layout="${message}"
archiveFileName="${basedir}/logs/archives/log.${shortdate}.{#}.log"
archiveAboveSize="5242880"
archiveEvery="Day"
archiveNumbering = "Rolling"
maxArchiveFiles="20"
/>
说明
你必须同时使用缓存布局渲染器和可变的longdate。要理解为什么这会起作用,您需要了解他们如何工作,以及他们如何互动。
的longdate:
fileName="${basedir}/logs/log.${longdate}.log"
在日志名称中使用的longdate变量将几乎保证新的日志文件在每次执行...除了它会创建一个新的日志文件每毫秒甚至在除了最罕见的情况之外,可能不希望执行一次执行。
缓存布局渲染:
fileName="${basedir}/logs/log.${shortdate:cached=true}.log"
缓存布局渲染器会缓存上的第一个日志调用的变量,然后一直用于后续条目值......但缓存只持续到执行完成。使用shortdate或任何其他不保证每次执行更改的变量都不起作用。它会找到一个具有相同文件名的日志文件,并且它只会追加(或者如果您拥有该文件,则删除)。这不是我们想要的。
联合:
fileName="${basedir}/logs/log.${longdate:cached=true}.log"
这工作,因为它需要每次执行第一个日志的毫秒时间戳记,然后缓存它,并且始终使用日志文件,直至终止执行(清除缓存)。下一次你运行它(除非它是相同的毫秒......不太可能!),你会得到一个新的缓存值和一个新的日志文件(但只有一个!)。
来源
2015-06-22 23:34:32
Mir
这是一个有帮助的答案!谢谢。 – Mikey
我找到了另一种方式 - '$ {guid:cached = true} .log' – Kai
@Mir:这是一个非常好的答案。但是我找到了一个不起作用的案例。 如果autoReload(https://github.com/nlog/NLog/wiki/Configuration-file#automatic-reconfiguration)设置为true,并且您在不关闭应用程序的情况下更改配置,它将关闭当前日志并启动一个新日志。 有没有办法解决这个问题? – IgorStack