zoukankan      html  css  js  c++  java
  • log4net简单使用

    前言

    作为Web平台或winform应用程序等软件来说,错误日志记录是一项基本并且十分重要的功能,比较简单的方式是使用try{}catch{}这类方式来将错误记录下来。这种方式有明显的代码堆积的弊端,另外它在处理不可控异常时也不能达到将异常全部记录下来的作用。

    原始解决方案

    以web为例,以下代码是我以前使用的方式,思路就是使用页面基类记录错误,然后在其它页面中继承该类,这样实现了错误信息被记录到文本文件中。

    public class SessionGlobal:System.Web.UI.Page
    {
        public SessionGlobal()
        {
            this.Load +=new EventHandler(BasePage_Load);
            this.Error += new EventHandler(BasePage_Error);
        }
    
        /// <summary>
        /// 页面出错处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BasePage_Error(object sender, EventArgs e)
        {
            string filePath=MapPath("~\\log");
            string fileName="ErrLog_" + String.Format("{0:yyyyMMdd}", DateTime.Now) + ".log";
            if (!Directory.Exists(filePath))
            {
                try
                {
                    Directory.CreateDirectory(filePath);
                }
                catch
                { }
            }
            StringBuilder sbLogContent=new StringBuilder();
            sbLogContent.Append("********************************************************\r\n");
            sbLogContent.Append("错误地址:" + HttpContext.Current.Request.Url.ToString() + "\r\n");
            sbLogContent.Append("绝对路径:" + Request.PhysicalApplicationPath.ToString() + Request.FilePath.ToString() + "\r\n");
            if (Request.UrlReferrer != null)
            {
                sbLogContent.Append("上一页面:" + Request.UrlReferrer.ToString() + "\r\n");
            }
            sbLogContent.Append("客户端IP:" + Request.UserHostAddress.ToString() + "\r\n");
            sbLogContent.Append("客户端浏览器:" + Request.UserAgent.ToString() + "\r\n");
            sbLogContent.Append("错误信息:" + HttpContext.Current.Error.Message + "\r\n");
    
            sbLogContent.Append("出错时间:" + DateTime.Now.ToString() + "\r\n");
            sbLogContent.Append("\r\n");
            sbLogContent.Append("*******************************************************\r\n");
            
            string file = filePath + "\\" + fileName;
    
            #region 写入日志
            if (!File.Exists(file))
            {
                try
                {
                    StreamWriter SW=File.CreateText(file);
                    SW.WriteLine(sbLogContent.ToString());
                    SW.Close();
                }
                catch
                { }
            }
            else
            {
                try
                {
                    StreamWriter SW=File.AppendText(file);
                    SW.WriteLine(sbLogContent.ToString());
                    SW.Close();
                }
                catch
                { }
            }
            #endregion
        }
    }
    

    当然这是非常非常简单的记录错误的方式,它的缺点也很明显:一是只能记录错误类信息,另外就是它只局限于存储于文本(或数据库)中,不能以windows事件的方式来存储。

    log4net简介

    鼎鼎大名的日志记录组件log4net来自log4j,除了支持文本文件记录外,还支持windows事件记录、控制台、以及数据库记录,同时还可以控制要记载的日志级别,日志类别包括FAIL、ERROR、WARN、INFO、DEBUG。

    log4net由五部分组成,分别为Appenders、Filters、Layouts、Logger和Object Renders。Appenders定义日志的输出;Filters用于过滤Appender输出的内容,可以设置指定等级、指定Logger名称、消息匹配属性或字符串才被记录;Layouts用于控制Appender输出格式,Loggers直接与应用程序交互,由它产生日志,然后由其引用的Appender记录再指定的媒介,由Layouts控制输出格式。Object Renders定义ILog实现方式。

    log4net使用

    首先到官方网站下载log4net,在项目中添加引用。然后在web.config中定义参数。我们以最简单的方式来使用:

        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
        </configSections>
    
        <log4net debug="true">
            <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
                <param name="File" value="log\\log4net.log"/>
                <layout type="log4net.Layout.PatternLayout">
                    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
                </layout>
            </appender>
            <logger name="File">
                <level value="All" />
                <appender-ref ref="LogFileAppender" />
            </logger>
        </log4net>
    
    

    这里我们是将写入方式是写入到当前站点的log文件夹中,这里如果担心文本增长过大,可以设置文本大小限制。关于这里的设置可以查看这篇文章:http://blog.csdn.net/lyjcn/archive/2009/08/11/4432833.aspx 也可以查看官方文档。

    上面我们定义的Appender的Name为File,在代码中也要使用该名称,否则就会产生对象无法实例化的错误。

    具体实现起来非常简单:

    ILog log = log4net.LogManager.GetLogger("File");//引入log4net
    //记录错误日志  
    log.Error("error", new Exception("Error Occur"));
    //记录严重错误  
    log.Fatal("fatal", new Exception("Fatal Occur"));
    //记录一般信息  
    log.Info("info");
    //记录调试信息  
    log.Debug("debug");
    //记录警告信息  
    log.Warn("warn");
    
    

    下载地址

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/walkingp/p/1896626.html
Copyright © 2011-2022 走看看