【记录】.net 通用log4net日志配置


asp.net mvc

1、引入log4netNuGet包。

2、修改Global.asax下的Application_Start方法。加入log4net.Config.XmlConfigurator.Configure(),修改如下:

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); log4net.Config.XmlConfigurator.Configure(); }

 3、修改web.config文件,增加以下节点配置:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
configSections>
<log4net configSource="Config\log4net.config" />

 4、在项目中新建Config文件夹,用于存放配置文件。

 5、在文件夹下新建文件log4net.config,内容如下:

<?xml version="1.0"?>
<log4net>
  <root>
    <level value="DEBUG"/>
    <appender-ref ref="SysAppender"/>
    <appender-ref ref="consoleApp"/>
  root>
  
  <appender name="SysAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Logs\\" />
    <param name="AppendToFile" value="true" />
    <param name="MaximumFileSize" value="20MB" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="\\yyyyMM\\yyyyMMdd".log"" />
    <param name="RollingStyle" value="Composite" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%n
--------------------------------------------------------------------------------------
%n日志时间:%d [%t] %n日志级别:%-5p %n日 志 类:%c [%x] %n%m %n" />
      <param name="Header" value="
======================================================================================
" />
    layout>
  appender>
  <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
    <layout type="log4net.Layout.PatternLayout,log4net">
      <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
    layout>
  appender>
  <logger name="WebLogger">
    <level value="DEBUG"/>
  logger>

log4net>

 调用示例:

private log4net.ILog log = log4net.LogManager.GetLogger("TestJob");
public void Execute(IJobExecutionContext context)
{
    var logContent = string.Format("{0}==>>{1}{2}", DateTime.Now, "create new log.", Environment.NewLine);
    log.Info(logContent);
}

.net core

新建Log4netHelper类,内容如下:

using log4net;
using log4net.Repository;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Text;

namespace Five.ScheduleQuartz.Utils.Tool
{
    /// 
    /// 日志等级
    /// 
    public enum LogLevel
    {
        Error,
        Debug,
        Warning,
        Info
    }
    /// 
    /// 单例模式初始化
    /// 
    public class Singleton
    {
        private ILog Log;
        private static Singleton instance;
        private Singleton() { }
        public static Singleton getInstance()
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
        /// 
        /// 获取日志初始化器
        /// 
        /// 类名 方法名
        /// 
        public ILog Init(string type)
        {
            Log = LogManager.GetLogger(Log4netHelper.Repository.Name, type);
            return Log;
        }
    }
    /// 
    /// 日志操作类
    /// 
    public class Log4netHelper
    {
        /// 
        /// log4net 仓储
        /// 
        public static ILoggerRepository Repository { get; set; }
        /// 
        /// 输出Erro日志
        /// 
        /// 日志内容
        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);
        }
        /// 
        /// 输出Warning日志
        /// 
        /// 日志内容
        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);
        }
        /// 
        /// 输出Info日志
        /// 
        /// 日志内容
        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);
        }
        /// 
        /// 输出Debug日志
        /// 
        /// 日志内容
        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);
        }
        /// 
        /// 写日志
        /// 
        /// 日志等级
        /// 日志信息
        /// 类名 方法名
        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;
            }

        }
    }
}

 修改Startup如下:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    //日志配置文件
    Log4netHelper.Repository = LogManager.CreateRepository("NETCoreRepository");
    XmlConfigurator.Configure(Log4netHelper.Repository, new FileInfo("./Config/log4net.config"));
 }

log4net.config配置文件内容参考上面的内容。

使用示例:

 Log4netHelper.Info("测试日志内容");