.NET6中使用Log4net记录日志
1、引用NuGet包
2、创建logHelper类
using log4net.Repository; using log4net; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace ConsoleApp_Log4net { public class Log4NetHelper { /// <summary> /// 日志等级 /// </summary> public enum LogLevel { Error, Debug, Warning, Info } /// <summary> /// 单例模式初始化 /// </summary> public class Singleton { private ILog Log; private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } /// <summary> /// 获取日志初始化器 /// </summary> /// <param name="type">类名 方法名</param> /// <returns></returns> public ILog Init(string type) { Log = LogManager.GetLogger(Log4netHelper.Repository.Name, type); return Log; } } /// <summary> /// 日志操作类 /// </summary> public class Log4netHelper { /// <summary> /// log4net 仓储 /// </summary> public static ILoggerRepository Repository { get; set; } /// <summary> /// 输出Erro日志 /// </summary> /// <param name="message">日志内容</param> public static void Error(string message) { StackTrace trace = new StackTrace(); //获取是哪个类来调用的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //获取方法名称 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "类名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; WriteLog(LogLevel.Error, message, type); } /// <summary> /// 输出Warning日志 /// </summary> /// <param name="message">日志内容</param> public static void Warning(string message) { StackTrace trace = new StackTrace(); //获取是哪个类来调用的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //获取方法名称 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "类名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; //记录日志 WriteLog(LogLevel.Warning, message, type); } /// <summary> /// 输出Info日志 /// </summary> /// <param name="message">日志内容</param> public static void Info(string message) { StackTrace trace = new StackTrace(); //获取是哪个类来调用的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //获取方法名称 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "类名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; //记录日志 WriteLog(LogLevel.Info, message, type); } /// <summary> /// 输出Debug日志 /// </summary> /// <param name="message">日志内容</param> public static void Debug(string message) { StackTrace trace = new StackTrace(); //获取是哪个类来调用的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //获取方法名称 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "类名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; //记录日志 WriteLog(LogLevel.Debug, message, type); } /// <summary> /// 写日志 /// </summary> /// <param name="logLevel">日志等级</param> /// <param name="message">日志信息</param> /// <param name="type">类名 方法名</param> private static void WriteLog(LogLevel logLevel, string message, string type) { ILog Log = Singleton.getInstance().Init(type); switch (logLevel) { case LogLevel.Debug: Log.Debug(message); break; case LogLevel.Error: Log.Error(message); break; case LogLevel.Info: Log.Info(message); break; case LogLevel.Warning: Log.Warn(message); break; } } } } }
3、创建log4net.config配置文件》注意:需右键,属性,复制输出目录设置为(如果较新则复制)
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<!--根配置-->
<root>
<!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
<level value="ERROR"/>
<level value="WARN"/>
<level value="INFO"/>
<level value="DEBUG"/>
<appender-ref ref="ErrorLog" />
<appender-ref ref="WarnLog" />
<appender-ref ref="InfoLog" />
<appender-ref ref="DebugLog" />
</root>
<!-- 错误 Error.log-->
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Error.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志输出格式//行号影响性能??-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!-- 警告 Warn.log-->
<appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Warn.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- 信息 Info.log-->
<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Info.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<!-- 调试 Debug.log-->
<appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="log"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/"Debug.log""/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n=====================================================================================================
%n[日志级别]%-5level
%n[记录时间]%date
%n[执行时间]%r
%n[线程]%t
%n[文件]%F
%n[行号]%L
%n[类名]%logger
%n[描述]%message
%n[详情]%exception"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
</log4net>
4、注入(在主程序入口,或Main方法中)
//将log4net在项目中启用日志文件注册 Log4netHelper.Repository = LogManager.CreateRepository("NETCoreRepository"); XmlConfigurator.Configure(Log4netHelper.Repository, new FileInfo(System.AppDomain.CurrentDomain.BaseDirectory + "/log4net.config"));
5、使用
Log4netHelper.Info("接口被调用:"); Log4netHelper.Error("接口被调用:"); Log4netHelper.Warning("接口被调用:"); Log4netHelper.Debug("接口被调用:");
6、实现效果