nlog求助,记录的日志文件太多了

从天而降的扣篮 2018-05-24 12:09:18
记录的日志太多了,怎么配置才能自动清除?

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"
throwExceptions="true"
internalLogLevel="off" internalLogFile="c:\temp\nlog-internal.log">

<variable name="logdir" value="${basedir}/logs/" />
<targets>
<target name="console" xsi:type="Console"
layout="${longdate}|${level}|${message}"/>
<target name="file" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard">
<target xsi:type="File" name="file" fileName="${logdir}${level}/${shortdate}.log"
layout="${longdate} ${level} [${logger}] ${message}"
archiveFileName="${logdir}${level}/${shortdate}.{#####}.log"
createDirs="true"
archiveAboveSize="1048576"
archiveNumbering="Sequence"
maxArchiveFiles="1024"
concurrentWrites="true"
keepFileOpen="false" />
</target>
<target xsi:type="Memory" name="memory" layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>

<rules>
<logger name="*" minlevel="Trace" writeTo="file" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>
</nlog>


目前,因为每天的日志需要记录很多,万一客户叫唤,也好从日志里翻出证据来。
但是每天要记录这么多,又没找到自动清除的配置,造成这个日志文件夹超级大,时不时需要记得过来清一下,好麻烦。
不知道如何激活nlog的自动清除功能,N天前的日志就可以删除了。

效果如下图:


...全文
3234 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
longasyan 2021-07-22
  • 打赏
  • 举报
回复

参考这篇文章,里面有详细的讲解,相信我
https://www.yuque.com/docs/share/a3d8b258-2524-4d50-a040-d8ab829d6676?# 《Nlog中的File输出配置》

  • 打赏
  • 举报
回复
<?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"> <targets > <!-- archiveAboveSize="5000000" 要限制每个文件的最大大小 maxArchiveFiles – 保存的最大存档文件数 enableFileDelete – 是否允许删除日志文件--> <default-target-parameters xsi:type="File" layout="${message}" encoding="utf-8" /> <target name="fileError" xsi:type="File" fileName="${basedir}/Logs/Error/${date:format=yyyy-MM-dd}_Error.log" layout="[${longdate}][${processtime}][${uppercase:${level}}]: ${message}" keepFileOpen="false" maxArchiveFiles="3" archiveEvery="Day" /> <target name="fileWarn" xsi:type="File" fileName="${basedir}/Logs/Warn/${date:format=yyyy-MM-dd}_Warn.log" layout="[${longdate}][${processtime}][${uppercase:${level}}]: ${message}" keepFileOpen="false" maxArchiveFiles="3" archiveEvery="Day" /> <target name="fileInfo" xsi:type="File" fileName="${basedir}/Logs/Info/${date:format=yyyy-MM-dd}_Info.log" layout="[${longdate}][${processtime}][${uppercase:${level}}]: ${message}" keepFileOpen="false" maxArchiveFiles="3" archiveEvery="Day" /> <target name="fileDebug" xsi:type="File" fileName="${basedir}/Logs/Debug/${date:format=yyyy-MM-dd}_Debug.log" layout="[${longdate}][${processtime}][${uppercase:${level}}]: ${message}" keepFileOpen="false" maxArchiveFiles="3" archiveEvery="Day" /> </targets> <rules> <logger name="*" level="Error" writeTo="fileDebug,fileInfo,fileWarn,fileError" /> <logger name="*" level="Warn" writeTo="fileDebug,fileInfo,fileWarn" /> <logger name="*" level="Info" writeTo="fileDebug,fileInfo" /> <logger name="*" level="Debug" writeTo="fileDebug" /> </rules> </nlog>
lig764 2019-01-03
  • 打赏
  • 举报
回复
想请教一下:我一个解决方案中有多个项目,每个项目中配了各自的NLog.config文件,每个项目的log输出到不同的文件;发现两个问题: 1.debug的时候,输出的是我启动项目配置的log文件名,但其他项目的log也输出到这里,跟我想的,输出到不同的文件不匹配; 2.程序发布后运行时,发现保存的log是另外一个项目配置的log输出,跟debug时输出的log文件名不同;同样,所有的log也只是输出到这个文件中; 下面是我的配置文件内容;能否帮忙解答一下上面的问题?谢谢 <?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"> <variable name="logDirectory" value="${basedir}/../Logs/ConfigUpdate/ConfigUpdate.log"/> <targets> <target name="logfile" xsi:type="File" fileName="${var:logDirectory}" maxArchiveFiles="5" archiveAboveSize="10240" archiveFileName="${basedir}/../Logs/archives_ConfigUpdate/ConfigUpdate.{#####}.log" archiveNumbering="Sequence" concurrentWrites="true" keepFileOpen="false" layout="${longdate} ${level} ${message} ${callsite:className=false:fileName=True:includeSourcePath=false:methodName=false}${newline}"/> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="logfile" /> </rules> </nlog>
奇葩史 2018-12-04
  • 打赏
  • 举报
回复

maxArchiveFiles="1024"
这个的意思是“归档文件数量”,设置1024,表示你最多可以保留1024个文件,设置小些就可以了。
  • 打赏
  • 举报
回复
自己写几行代码来移除文件,这个不会啊?!
游北亮 2018-08-24
  • 打赏
  • 举报
回复
我在5楼已经分享了啊,nlog.config的配置,在git上
  • 打赏
  • 举报
回复
也不见谁分享一下他正在用的配置文件,也给我们这些刚接触的一些指点啊。
  • 打赏
  • 举报
回复
也不见谁分享一下他正在用的配置文件,也给我们这些刚接触的一些指点啊。
  • 打赏
  • 举报
回复
想参考一下各位目前项目上的Nlog配置
c02645 2018-06-07
  • 打赏
  • 举报
回复
maxArchiveFiles="1024" 你设置了不能超过1k,当然会生成很多文件,设置大一些就没事了,可以设置102400,100k一个文件
  • 打赏
  • 举报
回复
引用 7 楼 LeiRobin 的回复:
你这个。。。太细了,同楼上,一般都是年/月/日文件夹 然后把一天的日志放在一起 定义好格式 查找也挺方便。其次清理日志的话,不一定非要在NLog去设定,换个思维,你也可以自己制定清理规则,写好排程,添加到任务计划或者设定Timer让它自己定时去清理。
因为日志写得太细,所以生成的文件太大,一天一百多MB
姓小名白丶 2018-05-25
  • 打赏
  • 举报
回复
引用 8 楼 ouyongke 的回复:
[quote=引用 7 楼 LeiRobin 的回复:] 你这个。。。太细了,同楼上,一般都是年/月/日文件夹 然后把一天的日志放在一起 定义好格式 查找也挺方便。其次清理日志的话,不一定非要在NLog去设定,换个思维,你也可以自己制定清理规则,写好排程,添加到任务计划或者设定Timer让它自己定时去清理。
因为日志写得太细,所以生成的文件太大,一天一百多MB[/quote]生成的文件太大,和你日志记得细不细 我觉得没有关系 我只是觉得 你这么记日志 同一天的日志分这么多文件。。。。没必要,你可以把一天的日志放在一个文件里面 定义好格式(记录时间或者ID之类的方便查找就行) 还有你可能要看一下你的日志内容 是不是有问题。。。。怎么会这么大 挑重点的记就行了
姓小名白丶 2018-05-25
  • 打赏
  • 举报
回复
你这个。。。太细了,同楼上,一般都是年/月/日文件夹 然后把一天的日志放在一起 定义好格式 查找也挺方便。其次清理日志的话,不一定非要在NLog去设定,换个思维,你也可以自己制定清理规则,写好排程,添加到任务计划或者设定Timer让它自己定时去清理。
大鱼> 2018-05-25
  • 打赏
  • 举报
回复
日志文件基本上时按照日期为一个文件的,你这个分那么细有什么特殊要求么?况且也不好查看啊
游北亮 2018-05-25
  • 打赏
  • 举报
回复
引用 2 楼 youbl 的回复:
我一般是按月份创建目录,例如:
<variable name="logDirectory" value="${basedir}/logs/${date:format=yyyyMM}"/>
然后搞一个定时任务,自动删除3个月前的目录
大哥,分享一下你的配置文件呗,方便后来者参考学习一下,虽然不能满足我这个项目,不过以后其他项目应该能用上。[/quote] 参考: https://github.com/youbl/PlanServer/blob/master/PlanServerTaskManager.Web/NLog.config 和我的封装: https://github.com/youbl/PlanServer/blob/master/PlanServerService/LogHelper.cs 有过有点历史了,应该还是13年左右封装的
IEEE_China 2018-05-25
  • 打赏
  • 举报
回复
把配置文件改成按月份或者按日创建目录,查找方便,清理也方便。
  • 打赏
  • 举报
回复
引用 1 楼 xomix 的回复:
https://cloud.tencent.com/developer/ask/51559/answer/84241 仅供参考,没细看。
兄弟,那边也没人回复哦。
引用 2 楼 youbl 的回复:
我一般是按月份创建目录,例如:
<variable name="logDirectory" value="${basedir}/logs/${date:format=yyyyMM}"/>
然后搞一个定时任务,自动删除3个月前的目录
大哥,分享一下你的配置文件呗,方便后来者参考学习一下,虽然不能满足我这个项目,不过以后其他项目应该能用上。
  • 打赏
  • 举报
回复
https://cloud.tencent.com/developer/ask/51559/answer/84241 仅供参考,没细看。
游北亮 2018-05-24
  • 打赏
  • 举报
回复
我一般是按月份创建目录,例如:
<variable name="logDirectory" value="${basedir}/logs/${date:format=yyyyMM}"/>
然后搞一个定时任务,自动删除3个月前的目录

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧