【问题标题】:Is there any similar kind of configure to rolingStyle="once" of log4net is available for NLog?是否有任何类似的配置到 rolingStyle="once" 的 log4net 可用于 NLog?
【发布时间】:2021-06-03 02:55:12
【问题描述】:

我目前正在使用 log4net,并且每小时执行一次日志文件存档。 现在我将 log4net 更改为 NLog

NLog Like rolingStyle="once" 中是否有类似的设置?这是 log4net 中可用的配置设置。

例如,之前在使用 log4net 时,创建的文件曾经是这样的:

LogFile.log
LogFile.log.1 <-last archive file

以下是我在 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}&#9;[%-5p]&#9;[%3t]&#9;%m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="DEBUG" />
        <levelMax value="FATAL" />
    </filter>
</appender>

【问题讨论】:

    标签: asp.net-core logging .net-core log4net nlog


    【解决方案1】:

    你可以:

    • 使用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>
    

    【讨论】:

      【解决方案2】:

      不是 log4net 方面的专家,但 it sounds like 认为 rolingStyle="once" 与 NLog FileTarget ArchiveOldFileOnStartup 相同。所以可能是这样的:

      <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>
      

      另见:https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples

      【讨论】:

        猜你喜欢
        • 2023-01-28
        • 1970-01-01
        • 1970-01-01
        • 2015-12-26
        • 2017-11-10
        • 1970-01-01
        • 2017-02-16
        • 2011-05-18
        • 1970-01-01
        相关资源
        最近更新 更多