log4net在项目中使用



1》从log4net官网下面log4net的文件包,然后在包的bin文件夹下的net文件夹中的4.0文件夹中找到log4net.dll文件,然后将它引入到我们的项目中来

2》在项目中新建一个log4net.config的配置文件。下面我们来配置这个log4net.config配置文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <configSections>
    <!--配置一个结点 名称为log4net-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <!--写入到文件-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">

      <!--文件路径,如果RollingStyle为Composite或Date,则这里设置为目录,文件名在DatePattern里设置,其他则这里要有文件名。已经扩展支持虚拟目录-->
      <param name="File" value="Log\\LogInfo\\" /><!--将日记写入到跟目录下面的Log文件夹下面的LogInfo文件夹下面的yyyy-MM-dd.TXT文件中-->     

      <param name="AppendToFile" value="true" />

      <param name="MaxSizeRollBackups" value="100" />

      <param name="MaximumFileSize" value="10240KB" />

      <param name="StaticLogFileName" value="false" />

      <param name="RollingStyle" value="Date" />

      <param name="DatePattern" value="yyyy-MM-dd.TXT" /> <!--TXT后缀必须是大写的,否则有问题-->

      <param name="CountDirection" value="-1" />

      <!--log4net记录错误的格式(即:用什么样的格式(布局)来记录错误)-->

      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value=" 【时间】:%d%n 【级别】:%p%n 【类名】:%c%n 【线程ID】: %thread %n 【文件地址】:%F 第%L行%n 【日志内容】:%m%n 【日记详细】:%exception %n---------------------------------------------------------------------------------------------------------------%n" />
      </layout>
    </appender>

    <!--将日记写入数据库-->

    <appender name="ADONetAppender_SqlServer" type="log4net.Appender.ADONetAppender">
      <bufferSize value="0" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <!--<connectionString value="SERVER=FB-VAIO;DATABASE=sales;UID=sa;PWD=123456;Connect Timeout=15;" />-->
      <connectionString value="Data Source=FB-VAIO;Initial Catalog=sales;Integrated Security=SSPI;Connect Timeout=15;" />
      <commandText value="INSERT INTO xlog ([Date],[Thread],[Level],[logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />

      <parameter>
        <parameterName value="@log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawTimeStampLayout"/>
      </parameter>

      <parameter>
        <parameterName value="@thread"/>
        <dbType value="String"/>
        <size value="255"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%t"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@log_level"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%p"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@logger"/>
        <dbType value="String"/>
        <size value="50"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@message"/>
        <dbType value="String"/>
        <size value="4000"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%m"/>
        </layout>
      </parameter>

      <parameter>
        <parameterName value="@exception"/>
        <dbType value="String"/>
        <size value="2000"/>
        <layout type="log4net.Layout.ExceptionLayout">
          <conversionPattern value="%exception"/>
        </layout>
      </parameter>
    </appender>

    <!--在出现什么级别的错误才记录错误 【注意:如果有多个appender-ref的时候,应该给他们放到同一个root节点下】-->
    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender"/>
      <appender-ref ref="ADONetAppender_SqlServer"/>
    </root>

  </log4net>
</configuration>

3》 配置完log4net.config配置文件 ,那么我们就需要将它加载到我们的项目中来。(即让新建的这个log4net.config配置文件与我们的项目关联起来)

现在,我决定建立一个单独的类库,在类库中,写代码将log4net.config这个配置文件加载到我们的项目中。

3.1:首先在我项目中Web.config文件指定我新建立的log4net.config这个配置文件的路径(即:在新建的类库中通过读取Web.config文件下的log4net.config的路径找到log4net.config文件,然后再把它加载到我们的项目中来) Web.config配置文件如下:

<?xml version="1.0" encoding="utf-8"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    </system.web>
  <appSettings>
    <!--这里添加了两个key,设定,如果key为log4net的value值为1,就表示我单独为log4net配置了配置文件,它并没有配置在Web.config里面,如果为0就表示lo4net的配置文件配置在Web.config中,没有作为一个单独文件配置-->
    <add key="log4net" value="1"/>
    <!--这里设定我们单独配置的log4net配置文件的路径-->
    <add key="log4netPath" value="D:\MVC\MvcTest\WebTest\log4net.config"/>
  </appSettings>
</configuration>

3.2:现在我们来新建一个类库,命名为Log4NetUtil  在它里面新建一个LogHelper.cs类 ,下面我们来写这个LogHelper.cs的代码:如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Log4NetUtil
{
    public class LogHelper
    {
        private log4net.ILog log = null;
        public LogHelper()
        {
            //如果Web.config配置文件中的key为log4net的value值为1,就表示log4net的配置文件是作为一个单独文件进行配置的,
            if (System.Configuration.ConfigurationManager.AppSettings["log4net"].ToString() == "1")
            {
                //那么我就获取log4net的配置文件,并将它加载到我们的项目中去
                string filePath = System.Configuration.ConfigurationManager.AppSettings["log4netPath"].ToString();
                System.IO.FileInfo file = new System.IO.FileInfo(filePath);

                //Getlogger()静态方法,用来检索框架里是否存在logger对象,如果不存在就创建一个名字为logger的对象
                log4net.Config.XmlConfigurator.Configure(file);
            }
            else
            {
                log4net.Config.XmlConfigurator.Configure();
            }
            log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        }
        /// <summary>
        /// 程序运行的过程中的,一般信息可以调用此方法记录日记
        /// </summary>
        /// <param name="info"></param>
        public void Info(string info)
        {
            if (log.IsInfoEnabled)
            {
                log.Info(info);
            }
        }
        /// <summary>
        /// 程序运行的过程中的,一般信息可以调用此方法记录日记
        /// </summary>
        /// <param name="info"></param>
        /// <param name="ex"></param>
        public void Info(string info, Exception ex)
        {
            if (log.IsInfoEnabled)
            {
                log.Info(info, ex);
            }
        }
        /// <summary>
        /// 程序出现错误的时候调用此方法记录日记(一般用在出现了异常以后)
        /// </summary>
        /// <param name="info"></param>
        public void Error(string info)
        {
            if (log.IsErrorEnabled)
            {
                log.Error(info);
            }
        }
        /// <summary>
        ///  程序出现错误的时候调用此方法记录日记(一般用在出现了异常以后)
        /// </summary>
        /// <param name="info"></param>
        /// <param name="ex"></param>
        public void Error(string info, Exception ex)
        {
            if (log.IsErrorEnabled)
            {
                log.Error(info, ex);
            }
        }
        /// <summary>
        /// 程序员觉得任何有利于程序在调试时更详细的了解系统运行状态的信息,比如变量的值等等,都可以调用此方法记录到日记
        /// </summary>
        /// <param name="info"></param>
        public void Debug(string info)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug(info);
            }
        }
        /// <summary>
        /// 程序员觉得任何有利于程序在调试时更详细的了解系统运行状态的信息,比如变量的值等等,都可以调用此方法记录到日记
        /// </summary>
        /// <param name="info"></param>
        /// <param name="ex"></param>
        public void Debug(string info, Exception ex)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug(info, ex);
            }
        }
        /// <summary>
        /// 程序出现警告时调用此方法记录日记(程序出现警告不会使程序出现异常,但是可能会影响程序性能)
        /// </summary>
        /// <param name="info"></param>
        public void Warn(string info)
        {
            if (log.IsWarnEnabled)
            {
                log.Warn(info);
            }
        }
        /// <summary>
        ///  程序出现警告时调用此方法记录日记(程序出现警告不会使程序出现异常,但是可能会影响程序性能)
        /// </summary>
        /// <param name="info"></param>
        /// <param name="ex"></param>
        public void Warn(string info, Exception ex)
        {
            if (log.IsWarnEnabled)
            {
                log.Warn(info, ex);
            }
        }
        /// <summary>
        /// 程序出现特别严重的错误,一般是在应用程序崩溃的时候调用此方法记录日记
        /// </summary>
        /// <param name="info"></param>
        public void Fatal(string info)
        {
            if (log.IsFatalEnabled)
            {
                log.Fatal(info);
            }
        }
        /// <summary>
        /// 程序出现特别严重的错误,一般是在应用程序崩溃的时候调用此方法记录日记
        /// </summary>
        /// <param name="info"></param>
        /// <param name="ex"></param>
        public void Fatal(string info, Exception ex)
        {
            if (log.IsFatalEnabled)
            {
                log.Fatal(info, ex);
            }
        }
    }
}

4》在我们的项目中添加引用,将新建的这个Log4NetUtil类库引入到我们的项目中来。  (到这一步就是一切准备妥当了,下面就要具体使用它了)

5》在项目中添加WebForm1.aspx页面文件。我们拖一个button控件到我们的WebForm1.aspx页面中来,button控件 命名 ”请点击按钮,测试错误“

双击button控件,给它添加单击事件,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using log4net;
using System.Reflection;
namespace WebTest
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            int x = 6;
            int y = 0;
            try
            {
                int z = x / y;
            }
            catch (Exception ex)
            {
                Log4NetUtil.LogHelper log = new Log4NetUtil.LogHelper();
                log.Error("错误:"+ex.Message,ex);

                Response.Write("OK");
            }
        }
    }
}

6》然后我们在数据中新建一个表 命名为 xlog(用于将日记记录到数据库中)  表结构如下:

7》大功告成: 下面我来生成一下解决方案,运行这个WebForm1.aspx页面

点击页面上的按钮。 然后我们再去我们数据库中的xlog表中查看一下数据,发现已经有一条错误日记写入到表中了。

我们再去项目所在的磁盘目录下  ,在项目文件夹下面我们看到生成了一个log文件夹,在log文件夹下面有一个loginfo文件夹,loginfo文件夹下面有一个以当前日期命名的txt文件,这个文件就是我们刚刚生成的错误日记了。打开看一下:

时间: 2024-10-06 18:24:29

log4net在项目中使用的相关文章

Log4Net 在多层项目中的使用小记

原文地址:http://www.cnblogs.com/zdh8675/p/3645556.html 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各有各的说法,我结合我自己这个项目的需要,首先,项目是分多层的,假如每一层都需要加入日志记录,那该怎么办呢,下面是我的一些操作步骤,记录出来和大家分享一下,不足之处希望大家多拍板砖多多指教. 这个截图是我的当前项目的层次结构,首先在Common层先

asp.net Web项目中使用Log4Net进行错误日志记录

使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息. 那么我们如何在Web项目中使用Log4Net呢? 一.基本配置 1.下载Log4Net,地址如下:http://logging.apache.org/log4net/download_log4net.cgi,如下图所示: 2.下载到本地后

web项目中的 log4net的配置

最近用log4net,网上查了很多资料,照着网上的配置大多都不管用,可能我还是有什么地方配置的不对.看出来的朋友平指出.下面是我自己亲测的,可以用! 1.web项目中的web.config 配置log4net <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细消息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --

ASP.NET项目中log4net插件的使用

一.在nuget上输入如下命令行 install-package log4net 二.在项目的web.config文件中配置log信息 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net" /> <!--日志的配置开始--> <log4net> <root> <level value=&qu

在asp.net core的项目中通过log4net添加日志记录到本地文件

=============================================== 2020/2/25_第1次修改                       ccb_warlock =============================================== 由于之前的时间都忙于项目的业务开发,对于log4net的使用一直是“拿来主义”,仅仅用在了调试时输出到控制台看结果,而没有深究配置文件的参数和具体的机制. 正巧这段时间项目进度没有那么紧张,我也有时间来完善框

在MVC三层项目中如何使用Log4Net

--前期准备(添加到队列中) 0-1在新建后的MVC项目中的[Models]中添加一个类,用于处理异常信息,并继承自HandleErrorAttribute public class MyExceptionAttribute: HandleErrorAttribute { //创建队列集合 public static Queue<Exception> ExceptionQueue = new Queue<Exception>(); /// <summary> /// 可

log4net项目中如何配置,以下详解

log4net.config配置文件 <?xml version="1.0" encoding="utf-8"?> <log4net debug="false"> <appender name="RootAppender" type="log4net.Appender.RollingFileAppender"> <lockingModel type="lo

【新手总结】在.Net项目中使用Redis作为缓存服务

最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写,很零碎也没沉淀下来什么,这次算是一个系统学习和实践过程的总结. 和Redis有关的基础知识 Redis是一个开源的分布式NoSql数据库,可以用来做缓存服务.消息队列.数据存储等等,数据类型之丰富,效率之高,简直逆天!没有了解过的可以移步去问度娘~客户端之丰富,足可见它的社区有多强大: 其中C#的客户端就有这么多: 没错,我们的项目里也选择了最热门的StackExchange.Redis作

Log4net在类库中的用法

app.config应当放置在解决方案的根目录下.具体流程如下: 第一步:应该下载log4net.dll并引入到你的项目中,下载见附件 第二步:需要配置相关的配置文件App.config或Web.config,顾名思义普通应用的配置文件 为App.config,asp.net的配置文件为Web.config.有关log的配置如下: <configuration>   <configSections>       <!-- log4net的定义 -->         &