NET LOG日志的使用以及设置文件大小和数量限制------关键字---caced和date
NET LOG日志的使用以及设置文件大小和数量限制------关键字---caced和date
新建控制台项目,选择项目右键属性,选择 “ 管理NuGet程序包(N)... ”,搜索NLog ,添加NLog ,版本4.7.14
1、新建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="false" internalLogLevel="Warn" internalLogFile="${basedir}/logs/NlogRecords.log"> <!--Nlog内部日志记录为Off关闭。除非纠错,不可以设为Trace否则速度很慢,起码Debug以上--> <targets> <!--输出文件 按天归档,最多存档文件7个,单个文件不超过50M,--> <!--输出文件 按天归档,最多存档文件7个,单个文件不超过50M, 日志文件的大小个数与文件名称有非常密切的关系,archiveFileName日志文件名称是常量的时候,设置archiveAbovesize会根据archiveAbovesize设置的大小进行生成信息的日志文件, archiveFileName日志文件名称是时间格式的时候,设置archiveAbovesize会根据archiveAbovesize设置的大小以及日志文件的时间格式来进行生成信息的日志文件,谁先到以水为准, 例如同一时间内日志文件大小达到archiveAbovesize日式文件设置的大小了,则以为archiveAbovesize为准生成新的文件 ,如果日志文件大小没有达到,时间变化了,则以时间为准生成新的日志文件,archiveAbovesize="10240",表示日志文件大小设置10kb,即archiveAbovesize="10240" ${date:format=yyyy-MM-dd HH_mm_ss} archiveFileName="${basedir}/logs/${date:format=yyyy-MM-dd HH_mm_ss}.txt" ${cached:${date:format=yyyy-MM-dd HH_mm_ss}} archiveFileName="${basedir}/logs/${cached:${date:format=yyyy-MM-dd HH_mm_ss}}.txt"--> <target name="logFile" xsi:type="File" concurrentWrites="true" fileName="${basedir}/logs/logfile.txt" archiveFileName="${basedir}/logs/log.{#}.txt" archiveNumbering="Date" maxArchiveFiles="7" archiveEvery="Day" archiveDateFormat="yyyyMMdd" archiveAbovesize="10240" layout="${longdate} ${uppercase:${level}} ${message}" /> <!--日志名称时间变量 关键字cached ${cached:${date:format=yyyy-MM-dd HH_mm_ss}} archiveFileName="${basedir}/logs/${cached:${date:format=yyyy-MM-dd HH_mm_ss}}.txt"--> <target name="logFileSize0" xsi:type="File" concurrentWrites="true" fileName="${basedir}/logs/${cached:${date:format=yyyy-MM-dd HH_mm_ss}}.txt" maxArchiveFiles="7" archiveAbovesize="1024" layout="${longdate} ${uppercase:${level}} ${message}" /> <!--日志名称时间变量 ${date:format=yyyy-MM-dd HH_mm_ss} archiveFileName="${basedir}/logs/${date:format=yyyy-MM-dd HH_mm_ss}.txt"--> <target name="logFileSize1" xsi:type="File" concurrentWrites="true" fileName="${basedir}/logs/${date:format=yyyy-MM-dd HH_mm_ss}.txt" maxArchiveFiles="7" archiveAbovesize="1024" layout="${longdate} ${uppercase:${level}} ${message}" /> <!--日志名称固定常量 archiveFileName="log.txt"--> <target name="logFileSize2" xsi:type="File" concurrentWrites="true" fileName="${basedir}/logs/log.txt" maxArchiveFiles="7" archiveAbovesize="1024" layout="${longdate} ${uppercase:${level}} ${message}" /> <!--日志名称时间变量 ${date:format=yyyy-MM-dd HH_mm} archiveFileName="${basedir}/logs/${date:format=yyyy-MM-dd HH_mm}.txt"--> <target name="logFileSize" xsi:type="File" concurrentWrites="true" fileName="${basedir}/logs/${date:format=yyyy-MM-dd HH_mm}.txt" maxArchiveFiles="7" archiveAbovesize="10240" layout="${longdate} ${uppercase:${level}} ${message}" /> <!--输出彩色控制台 xsi:type="Console"是指定输出到普通控制台--> <target name="logConsole" xsi:type="ColoredConsole" useDefaultRowHighlightingRules="false" layout="${pad:padding=-5:fixedLength=True:inner=${level:uppercase=true}} : ${longdate} | ${logger} | ${message} ${onexception:inner=${newline}${exception:format=tostring}}"> <highlight-row condition="level == LogLevel.Trace" foregroundColor="DarkGray" /> <highlight-word text="TRACE" foregroundColor="White" backgroundColor="DarkGray" ignoreCase="false" wholeWords="true"/> <highlight-word text="DEBUG" foregroundColor="White" backgroundColor="DarkGreen" ignoreCase="false" wholeWords="true"/> <highlight-word text="INFO " foregroundColor="White" backgroundColor="DarkCyan" ignoreCase="false" wholeWords="false"/> <highlight-word text="WARN " foregroundColor="DarkGray" backgroundColor="Yellow" ignoreCase="false" wholeWords="false"/> <highlight-word text="ERROR" foregroundColor="White" backgroundColor="Red" ignoreCase="false" wholeWords="true"/> <highlight-word text="FATAL" foregroundColor="White" backgroundColor="Magenta" ignoreCase="false" wholeWords="true"/> </target> </targets> <rules> <!--注意这里的name="*",如果这里的name=xx了那么在C#的后台.cs文件使用日志的时候必须把xx当做参数来传递,否则没有日志输出--> <!--注意这里的name="*",如果这里的name=xx了那么在C#的后台.cs文件使用日志的时候必须把xx当做参数来传递,否则没有日志输出--> <!--minlevel all>fatal>error>warn>debug>info>trace>off />--> <!--minlevel="Info" 表示只有Info以上的fatal,error才会输出日志,warn debug info trace不会输出日志 all 所有等级都会输出日志 off 所有等级都不输出日志/>--> <logger name="*" minlevel="Info" writeTo="logConsole" /> <logger name="*" minlevel="Info" writeTo="logFile" /> <!--<logger name="*" minlevel="Info" writeTo="logFileSize" />--> </rules> </nlog>
2、设置nlog.config属性,,复制到输出目录---始终复制,生成操作---内容
3、代码使用
using log4net; using System; using System.Collections.Generic; using System.Configuration; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using Utils; namespace ConsoleTest { internal class Program { /// <summary> /// 日志 /// </summary> private static readonly NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger(); static void Main(string[] args) { try { TestEnum(); #region MyRe测试gion //TestLinqOrderBy(); //TestResolveArgs(); //TestTestHID(); //TestConvert(); //TesttWebSocket(); #endregion Console.ReadKey(); } catch/*(Exception ex)*/ { //_logger.Error($"IdWorkerManager,初始化报错,错误信息:{ex.InnerException}"); } } public static void TestEnum() { _logger.Info($"测试枚举。。。。"); string comment = "77777"; var enumIsDefined = Enum.IsDefined(typeof(EvMSEvaluateBmyyy), "服务条件差"); if (enumIsDefined) { var enumValue = (EvMSEvaluateBmyyy)Enum.Parse(typeof(EvMSEvaluateBmyyy), "服务条件差"); comment = comment + "|" + enumValue.GetHashCode() + "|" + "服务条件差"; //获取枚举名称字符串 var ss= EvMSEvaluateBmyyy.交易核税慢.ToString(); } while (true) { _logger.Info($"测试枚举。。。。"); } //int a = 1; //var senumName = Enum.GetName(typeof(EvMSEvaluateBmyyy), a); //Console.WriteLine($"枚举--根据值获取名称:值:{a}------名称:{senumName}"); //var enumValue = Enum.GetValues(typeof(EvMSEvaluateBmyyy)); //var enumValue1 = Enum.GetNames(typeof(EvMSEvaluateBmyyy)); //var enumValue2 = Enum.IsDefined(typeof(EvMSEvaluateBmyyy),2); //var enumValue3 = Enum.IsDefined(typeof(EvMSEvaluateBmyyy), "服务条件差"); //if (enumValue3) //{ // var dddd= Enum.Parse(typeof(EvMSEvaluateBmyyy), "服务条件差"); // var dddd2 =(EvMSEvaluateBmyyy)(dddd); // var dddd3 = dddd2.GetHashCode(); // Console.WriteLine(); //} var enumValue4 = Enum.IsDefined(typeof(EvMSEvaluateBmyyy), EvMSEvaluateBmyyy.其他); } } }
龙腾一族至尊龙骑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2016-05-30 C# 字符串加密解密方法
2016-05-30 ASP.NET多次点击提交按钮以及Session超时和丢失过期问题
2016-05-30 CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析
2016-05-30 WinForm实现简单的拖拽文件到出题的功能(C#)(3)
2016-05-30 OSI模型七层模型结构
2016-05-30 有用的链接