Logo

.NET6中使用Log4net记录日志

photo

2024年06月25日

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;
                }

            }
        }
    }
}

View Code

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/&quot;Error.log&quot;”/>
    <!–追加到文件–>
    <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/&quot;Warn.log&quot;”/>
    <!–追加到文件–>
    <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/&quot;Info.log&quot;”/>
    <!–追加到文件–>
    <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/&quot;Debug.log&quot;”/>
    <!–追加到文件–>
    <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、实现效果

 

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!

留言板

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

热门文章

WordPress 后台编辑器样式实现直接预览 在WordPress3.0以后,有一个新的实用功能:你可以更改默认后台编辑器(TinyMCE)的样...WordPress后台编辑器样式实现直接预览 作者:Pastore Antonio
1451 浏览量
【干货】Chrome插件(扩展)开发全攻略 写在前面我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的...【干货】Chrome插件(扩展)开发全攻略 作者:Pastore Antonio
1415 浏览量
CentOS 编译错误+配置错误解决方法集合 ERROR:theHTTPXSLTmodulerequiresthelibxml2/l...CentOS编译错误+配置错误解决方法集合 作者:Pastore Antonio
1409 浏览量
WordPress中加载JavaScript脚本的方法 在WordPress中加载脚本(为CSS和JS,下同)文件,大多数人的做法是直接在hea...WordPress中加载JavaScript脚本的方法 作者:Pastore Antonio
1385 浏览量
wordpress学习五: 通过wordpress_xmlrpc的python包远程操作wordpress wordpress提供了丰富的xmlrpc接口api来供我们远程操控wp的内容。伟大的开源社区有人就...wordpress学习五:通过wordpress_xmlrpc的python包远程操作wordpress 作者:Pastore Antonio
1382 浏览量