zoukankan      html  css  js  c++  java
  • Log4net

    上一篇, 都是从别人那里拷过来的, 主要是介绍规则和说明的. 这一篇, 才是重点, 讲实际使用.

    首先介绍项目中最常用的配置文件方式.

    一、log4net.config 文件方式

    我习惯, 把log4net的配置, 放在一个单独的配置文件中, 而不是放在 app.config或者web.config文件中, 这样做, 虽然麻烦了一点, 但是好处就是泾渭分明, 清晰明了.

    1. 首先要做的, 就是在 AssemblyInfo.cs 文件中, 加一句话

    [assembly:log4net.Config.DOMConfigurator(Watch=true, ConfigFile="Log4net.config")]

    2. 接下来, 有两种方法, 一种是在app.config/web.config文件中加两句话, 另一种是在程序中加一句话. 那么先看第一种吧.

    2.1 web.config 

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

    与这无关的配置, 我都干掉了.  接下来, 可以看看我的 Log4net.config文件

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <root>
        <level value="ALL" />
        <appender-ref ref="ErrorLogFileAppender" />
        <appender-ref ref="TraceLogFileAppender" />
      </root>
    
      <!--跟踪日志输出-->
      <appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="LogsTrace" />
        <appendToFile value="true" />
        <MaxSizeRollBackups value="20" />
        <RollingStyle value="Date" />
        <DatePattern value="yyyy-MM-dd'.txt'" />
        <StaticLogFileName value="false" />
        <layout type="log4net.Layout.PatternLayout,log4net">
          <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
          <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
          <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter,log4net">
          <levelMin value="DEBUG" />
          <levelMax value="INFO" />
        </filter>
      </appender>
    
      <!--错误日志输出-->
      <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="LogsError" />
        <MaxSizeRollBackups value="20" />
        <StaticLogFileName value="false" />
        <DatePattern value="yyyy-MM-dd'.txt'" />
        <RollingStyle value="Date" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout,log4net">
          <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
          <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
          <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter,log4net">
          <levelMin value="ERROR" />
          <levelMax value="FATAL" />
        </filter>
      </appender>
    </log4net>

    我在controller中, 弄了一个错误点, 还是把代码贴出来吧. 清晰点

    public ActionResult Index()
    {
        LogHelper.Log("trace").WriteInfo("进入HomeController/Index方法");try
        {
            int a = 0;
    
            int b = 1;
    
            var s = b / a;
        }
        catch (Exception ex)
        {
            string errorMsg = string.Format(@"后台异常信息:【{0}】,
        引发异常的方法:【{1}】,
        引发异常的对象:【{2}】",
                                                ex.Message,  //异常信息
                                                ex.TargetSite.ToString(),   //异常方法名
                                                ex.Source //引发异常的对象   
                                                );
            LogHelper.Log("logsys").WriteError(errorMsg);
        }
        LogHelper.Log("trace").WriteInfo("离开HomeController/Index方法");
        return View(list);
    }

    接下来看一下结果:

    1). 看一下生成的目录

     

    这里使用的是日期命名的方式, 每天一个文件, 还有一种, 是使用大小限制的方式, 一个文件限制比如10M, 过了10M, 会自动重新生成一个文件.

    2). 看一下日志里面记录的内容

    这里的例子, 用的都是最简单的方式, 主要是介绍一下使用方法.

    2.2 程序中配置的方式

    public class LogHelper
    {
        static LogHelper()
        {
            XmlConfigurator.Configure(new FileInfo("Log4net.config"));
        }
    
        private static LogHelper _instance = null;
        private static ILog ILog;
    
        public static LogHelper Log(Type t)
        {
            if (_instance == null)
                _instance = new LogHelper();
    
            ILog = LogManager.GetLogger(t);
    
            return _instance;
        }
    
        public static LogHelper Log(string sType)
        {
            if (_instance == null)
                _instance = new LogHelper();
    
            ILog = LogManager.GetLogger(sType);
    
            return _instance;
        }
        /// <summary>
        /// 写调试信息
        /// </summary>
        /// <param name="msg">消息</param>
        public void WriteDebug(string msg)
        {
            ILog.Debug(msg);
        }
    
        /// <summary>
        /// 写普通信息
        /// </summary>
        /// <param name="msg">消息</param>
        public void WriteInfo(string msg)
        {
            ILog.Info(msg);
        }
    
        /// <summary>
        /// 写警告信息
        /// </summary>
        /// <param name="msg">消息</param>
        public void WriteWarn(string msg)
        {
            ILog.Warn(msg);
        }
    
        /// <summary>
        /// 写错误信息
        /// </summary>
        /// <param name="msg">消息</param>
        public void WriteError(string msg)
        {
            ILog.Error(msg);
        }
    
        /// <summary>
        /// 写错误信息
        /// </summary>
        /// <param name="msg">消息</param>
        /// <param name="ex">错误信息</param>
        public void WriteError(string msg, Exception ex)
        {
            ILog.Error(msg, ex);
        }
    
        /// <summary>
        /// 写重大错误信息
        /// </summary>
        /// <param name="msg">消息</param>
        public void WriteFatal(string msg)
        {
            ILog.Fatal(msg);
        }
    }

    主要是 XmlConfigurator.Configure() 方法. config里面app.config/web.config文件中不加配置, 加这一句话也是可以的.

    看一下结果:

    这里只有Begin logging , 为啥没有 End logging呢, 这个是logger自动加的, 会在结束的时候加上去的.

  • 相关阅读:
    Redis 如何保证缓存与数据库双写时的数据一致性
    Redis 缓存雪崩和缓存穿透问题
    Redis 的并发竞争 Key 问题
    【转】intelliJ IDEA集成checkStyle
    【转】hadoop深入研究:(十一)——序列化与Writable实现
    【转】Hadoop在MapReduce中使用压缩详解
    【转】JDK工具jinfo用法详解
    【转】JVM统计监控工具-jstat
    【转】jps命令使用
    基于MLlib的机器学习--协同过滤与推荐
  • 原文地址:https://www.cnblogs.com/elvinle/p/6256170.html
Copyright © 2011-2022 走看看