使用log4net记录日志

自己试的一个log4net记录日志小demo,写到文本中,log4net记录日志的功能远比这个强大的多,先记录一下这个简单的demo

(1)一个配置文件

(2)一个日志帮助类

一、配置文件内容

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <appender name="ErrorFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log\\error\\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaxFileSize" value="10240"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="'error_'yyyy_MM_dd'.log'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
      </layout>
    </appender>
    
    <appender name="FatalFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log\\fatal\\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaxFileSize" value="10240"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="'fatal_'yyyy_MM_dd'.log'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
      </layout>
    </appender>
    
    <appender name="InfoFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log\\info\\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaxFileSize" value="10240"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="'info_'yyyy_MM_dd'.log'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
      </layout>
    </appender>

    <appender name="WarnFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log\\warn\\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaxFileSize" value="10240"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="'warn_'yyyy_MM_dd'.log'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
      </layout>
    </appender>

    <appender name="TraceFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log\\trace\\"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaxFileSize" value="10240"/>
      <param name="StaticLogFileName" value="false"/>
      <param name="DatePattern" value="'trace_'yyyy_MM_dd'.log'"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="日志时间:[%d] %n日志级别:[%-5p] %n线程编号:[%t] %n日志内容:%m %n%n" />
      </layout>
    </appender>

    <logger name="error">
      <level value="ERROR"/>
      <appender-ref ref="ErrorFileAppender"/>
    </logger>
    <logger name="fatal">
      <level value="FATAL"/>
      <appender-ref ref="FatalFileAppender" />
    </logger>
    <logger name="info">
      <level value="INFO"/>
      <appender-ref ref="InfoFileAppender"/>
    </logger>
    <logger name="warn">
      <level value="Warn"/>
      <appender-ref ref="WarnFileAppender"/>
    </logger>
    <logger name="trace">
      <level value="DEBUG"/>
      <appender-ref ref="TraceFileAppender"/>
    </logger>
  </log4net>
</configuration>

配置文件结点含义详细说明链接:https://www.cnblogs.com/kissazi2/p/3392605.html

二、LogHelper.cs


using log4net;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Teld.Base.MD.Business
{
    public class LogHelper
    {
        private readonly static string _configFileName = "MD_log4net.config";
        private readonly static ILog _errorLog;
        private readonly static ILog _falatLog;
        private readonly static ILog _infoLog;
        private readonly static ILog _warnLog;
        private readonly static ILog _traceLog;

        private LogHelper() { }

        static LogHelper()
        {
            var configFilePath = string.Format("{0}\\bin\\{1}", System.AppDomain.CurrentDomain.BaseDirectory, _configFileName);
            //var str = System.AppDomain.CurrentDomain.BaseDirectory;
            //var path = configFilePath;
            //var file = new FileInfo(path);
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));
            _errorLog = LogManager.GetLogger("error");
            _falatLog = LogManager.GetLogger("fatal");
            _infoLog = LogManager.GetLogger("info");
            _warnLog = LogManager.GetLogger("warn");
            _traceLog = LogManager.GetLogger("trace");
        }

        public static void Error(object message)
        {
            if (_errorLog.IsErrorEnabled)
            {
                _errorLog.Error(message);
            }
        }
        public static void Error(Exception ex)
        {
            if (_errorLog.IsErrorEnabled)
            {
                var err = JsonConvert.SerializeObject(ex);
                _errorLog.Error(err);
            }
        }
        public static void Fatal(object message)
        {
            if (_errorLog.IsFatalEnabled)
            {
                _falatLog.Fatal(message);
            }
        }
        public static void Info(object message)
        {
            if (_infoLog.IsInfoEnabled)
            {
                _infoLog.Info(message);
            }
        }
        public static void Warn(object message)
        {
            if (_warnLog.IsWarnEnabled)
            {
                _warnLog.Warn(message);
            }
        }
        public static void Trace(object message)
        {
            if (_traceLog.IsDebugEnabled)
            {
                _traceLog.Debug(message);
            }
        }
        public static void Log(object message,LogLevel level)
        {
            if (level == LogLevel.Error) Error(message);
            if (level == LogLevel.Fatal) Fatal(message);
            if (level == LogLevel.Info) Info(message);
            if (level == LogLevel.Warn) Warn(message);
        }
        public static void Log(Exception ex)
        {
            Error(ex);
        }

        public enum LogLevel
        {
            Error=1,
            Fatal,
            Info,
            Warn,
            Trace
        } 
    }
}

然后在需要记日志的地方直接调用上面改方法即可

 LogHelper.Trace("获取费用字典列表成功");

三、遇到的问题

(1)因为我是在测试程序里调用,在bin文件下的Debug文件夹下的bin文件夹,需要放上这个config文件,要不然

 var configFilePath = string.Format("{0}\\bin\\{1}", System.AppDomain.CurrentDomain.BaseDirectory, _configFileName);
 log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));

这个路径下找不到该文件,会报错FileNotFound

(2)第一次配置文件里的命名少了一个单引号,'error_'yyyy_MM_dd'.log',导致报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值