.net 5.0 下记录日志以及日志的配置
1.我们先开始准备一个日志的Helper
2.然后在指定目录下添加配置文件 .XML
using log4net; using log4net.Config; using System; using System.IO; namespace AnnualBill.Logger { public class LoggerHelper { #region Fields private static readonly ILog logger; #endregion #region Constructors static LoggerHelper() { if (logger == null) { var repository = LogManager.CreateRepository("MixdoRepository"); //log4net从log4net.config文件中读取配置信息 var log4netConfig = new FileInfo("App_Data/log4net.config.xml"); XmlConfigurator.Configure(repository, log4netConfig); logger = LogManager.GetLogger(repository.Name, "InfoLogger"); } } #endregion #region Utilities /// <summary> /// 普通日志 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Info(string message, Exception exception = null) { if (exception == null) logger.Info(message); else logger.Info(message, exception); } /// <summary> /// 告警日志 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Warn(string message, Exception exception = null) { if (exception == null) logger.Warn(message); else logger.Warn(message, exception); } /// <summary> /// 错误日志 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Error(string message, Exception exception = null) { if (exception == null) logger.Error(message); else logger.Error(message, exception); } #endregion } }
<?xml version="1.0" encoding="utf-8"?> <log4net> <!-- Define some output appenders --> <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"> <file value="log.txt" /> <!--追加日志内容--> <appendToFile value="true" /> <!--防止多线程时不能写Log--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--可以为:Once|Size|Date|Composite--> <!--Composite为Size和Date的组合--> <rollingStyle value="Composite" /> <!--当备份文件时,为文件名加的后缀--> <datePattern value="yyyyMMdd.TXT" /> <!--日志最大个数,都是最新的--> <!--rollingStyle节点为Size时,只能有value个日志--> <!--rollingStyle节点为Composite时,每天有value个日志--> <maxSizeRollBackups value="20" /> <!--可用的单位:KB|MB|GB--> <maximumFileSize value="3MB" /> <!--置为true,当前最新日志文件名永远为file节中的名字--> <staticLogFileName value="true" /> <!--输出级别在INFO和ERROR之间的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ALL" /> <param name="LevelMax" value="FATAL" /> </filter> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> </layout> </appender> <root> <priority value="ALL"/> <level value="ALL"/> <appender-ref ref="rollingAppender" /> </root> </log4net>
这里再添加一种配置方式
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <log4net> <appender name="ElkAppender" type="log4net.Appender.SocketAppender, Elk.Appender"> <!--远程Logstash服务地址--> <!--RemoteAddress value="xxx.xxx.xx.xxx" / --> <RemotePort value="4569" /> <!--socket地址族,当前为ipv4--> <AddressFamily value="InterNetwork" /> <SocketType value="Stream" /> <ProtocolType value="Tcp" /> <!--连接失败的重试次数--> <ConAttemptsCount value="5" /> <!--连接失败重试的间隔时间--> <ConAttemptsWaitingTimeMilliSeconds value="3000" /> <!--启用线程池发送消息--> <UseThreadPoolQueue value="true" /> <!--格式化为json--> <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json"> <member value="appname|apos_member_service" /> <member value="env:env" /> <member value="level:level" /> <member value="logger:logger" /> <member value="message:messageObject" /> <member value="exception:exception" /> <member value="traceId:traceId" /> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" /> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Info.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <!--备份log文件的个数最多10个--> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <!--指定log的格式--> <conversionPattern value="[%date] Thread:%thread %message%newline" /> </layout> </appender> <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Debug.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date] Thread:%thread %message%newline" /> </layout> </appender> <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Warn.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date] Thread:%thread %message%newline" /> </layout> </appender> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file type="log4net.Util.PatternString" value="App_Data\log\%date{yyyy-MM-dd}.Error.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="100" /> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date] Thread:%thread %message%newline" /> </layout> </appender> <root> <level value="ALL" /> <appender-ref ref="ElkAppender"/> </root> <logger name="infologger"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <logger name="debuglogger"> <level value="DEBUG" /> <appender-ref ref="DebugAppender" /> </logger> <logger name="warnlogger"> <level value="WARN" /> <appender-ref ref="WarnAppender" /> </logger> <logger name="errorlogger"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> </log4net> </configuration>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架