如何解决是否有任何类似于 log4net 的 rollingStyle="once" 的配置可用于 NLog?
我目前正在使用 log4net,并且每小时都在执行日志文件归档。 现在我将 log4net 更改为 NLog
NLog Like rolingStyle="once"
中是否有类似的设置?这是 log4net 中可用的配置设置。
例如之前使用 log4net 创建的文件曾经是这样的:
LogFile.log
LogFile.log.1 <-last archive file
以下是我在 log4net 中使用的配置,我想使用确切的配置设置,以便存档文件命名应保持在 log4net 中的样子:
<appender name="Work" type="RMM.Common.Logger.LogFileRollingAppender,Common">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" />
<file type="log4net.Util.PatternString" value="%property{EdgeAPILogPath}\WebAPI_Work.log" />
<param name="AppendToFile" value="true"/>
<rollingStyle value="Once" />
<rollingStyle value="Composite" />
<datePattern value=".yyyyMMdd-HH" />
<maxSizeRollBackups value="300" />
<maximumFileSize value="20MB" />
<Encoding value="UTF-8" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%utcdate{yyyy/MM/dd HH:mm:ss,fff}	[%-5p]	[%3t]	%m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
</appender>
解决方法
您可以:
- 使用
fileName="${basedir}/logs/${cached:${date:format=yyyy-MM-dd HH_mm_ss}}.log"
来确保每个应用程序实例有一个日志文件。 - 使用
archiveFileName="${archiveLogDirectory}/LogFile.log.{####}"
在末尾附加数字(根据您的#
,您可以根据需要随意添加或删除maxArchiveFiles
)。 - 使用
archiveNumbering="Sequence"
实现您想要的顺序(数字越大 = 日志越新)。
来源:this piece of documentation 和一些个人经验。
希望这个基本示例能帮助您更接近最终目标:
<?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"
autoReload="true"
internalLogLevel="Error"
internalLogFile="./internal-nlog.txt"
throwExceptions="true">
<variable name="logDirectory" value="./logs"/>
<variable name="archiveLogDirectory" value="./logs/archive"/>
<targets>
<target name="errors"
xsi:type="File"
fileName="${logDirectory}/${cached:${date:format=yyyy-MM-dd HH_mm_ss}}.log"
archiveFileName="${archiveLogDirectory}/LogFile.log.{#}"
maxArchiveFiles="9"
archiveEvery="Hour"
archiveNumbering="Sequence"
/>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="errors"/>
</rules>
</nlog>
,
不是 log4net 的专家,但 setContentView(int)
rolingStyle="once"
与 NLog FileTarget it sounds like 相同。所以也许是这样的:
<nlog>
<variable name="EdgeAPILogPath" layout="${basedir}" />
<targets>
<target xsi:type="file" name="work"
fileName="${EdgeAPILogPath}/WebAPI_Work.log"
encoding="utf-8"
archiveNumbering="DateAndSequence"
archiveFileName="${EdgeAPILogPath}/WebAPI_Work.{#}.log"
archiveDateFormat="yyyyMMdd-HH"
archiveEvery="Hour"
archiveAboveSize="20000000"
archiveOldFileOnStartup="true"
maxArchiveFiles="300" />
</targets>
<rules>
<logger name="*" minLevel="Debug" writeTo="work" />
</rules>
</nlog>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。