gpt4 book ai didi

error-handling - NLog 轮换和清理日志文件

转载 作者:行者123 更新时间:2023-12-02 04:33:47 24 4
gpt4 key购买 nike

在我的公司内,我们正在使用 NLog。我们遇到大量日志文件的问题。我们想要做的是按天归档文件并最多保留 x 数量的文件。比方说 7。我在互联网上阅读了几个与此相关的主题,它们大多指向我修改 NLog.config 文件的相同方向。然而,它似乎不愿意像我期望的那样轮换文件。目前所需文件夹中尚未存档任何内容。但所有文件都按以下格式保存在“logs”目录中;

Log.info.2011-11-07.txt

在我的应用程序中,我有一个目录“logs”。所有日志文件都保存在该文件夹内。我还有一个名为“archives”的文件夹,我想在其中存档所有旧文件。当该目录内的日志文件达到最大数量后,它们应该被自动清理。这可能吗?我当前的 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"
autoReload="true"
throwExceptions="true"
internalLogFile="C:\nlog-internal.txt"
internalLogLevel="Error">

<extensions>
<add assembly="NLog.Extended" />
</extensions>

<targets>
<!-- will move file to archive once it reaches 1MB. Files are archived by day, with a maximum of three files. ConcurrentWrites is set to false,
change to true if multiple processes will be writing to the logfile-->
<target name="file" xsi:type="File" fileName="${basedir}/logs/Log.info.${shortdate}.txt"
layout="${longdate} ${callsite} ${level}: ${message} ${exception:format=Message,StackTrace} ${stacktrace}"
archiveFileName="${basedir}/logs/archives/log.info.${shortdate}.txt"
archiveAboveSize="1048576"
archiveEvery="Day"
archiveNumbering = "Rolling"
maxArchiveFiles="7"
concurrentWrites="false"
/>
<target name="file-default" xsi:type="File" fileName="${basedir}/log_default.txt"/>
<target name="file-debug" xsi:type="File" fileName="${basedir}/log_debug.txt"/>
<target name="file-testclass" xsi:type="File" fileName="${basedir}/log_testclass.txt"/>
<target name="mail" xsi:type="Mail"
subject="${level} - ${aspnet-request:serverVariabele=PATH_INFO} | ${callsite:includeSourcePath=true}"
to="someone@mail.com"
smtpServer="mail.server.com"
from="no-reply@errormail.com"/>
<target xsi:type="Database"
name="TestDatabaseLogging"
connectionString="Data Source=123.123.123.123;Initial Catalog=NLog_Test;User ID=su_Nlog;Password=test123"
dbDatabase="NLog_Test">
<commandText>
insert into INNO_LOG ([createDate], [Origin], [LogLevel], [Message], [Exception], [StackTrace]) values (@createDate, @origin, @logLevel, @message, @exception, @stackTrace)
</commandText>
<parameter name="@createDate" layout="${date}"/>
<parameter name="@origin" layout="${callsite}"/>
<parameter name="@logLevel" layout="${level}"/>
<parameter name="@message" layout="${message}"/>
<parameter name="@exception" layout="${exception:format=Message,StackTrace}"/>
<parameter name="@stackTrace" layout="${stacktrace}"/>
</target>

</targets>

<rules>
<logger name="*" minlevel="Fatal" writeTo="mail" />
<logger name="*" minlevel="Error" writeTo="TestDatabaseLogging" />
<logger name="*" minlevel="Debug" writeTo="file-debug" />
<logger name="*" minlevel="Info" writeTo="file" />
<!--Log to specific files for specific classes.-->
<logger name="_Default" minlevel="Trace" writeTo="file-default" />
<logger name="TestClass" minlevel="Trace" writeTo="file-testclass" />
</rules>
</nlog>

编辑:ckellers 回答后的最终(删减的)解决方案。

<target name="file"
xsi:type="File"
fileName="${basedir}/logs/Log.${level}.current.txt"
layout="${longdate} ${callsite} ${level}: ${message} ${exception:format=Message,StackTrace} ${stacktrace}"
archiveFileName="${basedir}/logs/archives/log.error.${shortdate}.{#}.txt"
archiveAboveSize="5242880"
archiveEvery="Day"
archiveNumbering = "Rolling"
maxArchiveFiles="3" />

最佳答案

看起来问题出在文件名定义中的shortdate。请参阅我对此问题的回答:Delete log files after x days

您必须定义不带日期部分的文件名

fileName="${basedir}/logs/Log.info.txt

关于error-handling - NLog 轮换和清理日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8036681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com