第一步:

添加并应用Log4net.dll。然后在Web.config文件中添加下面的配置局

  1. <configSections>
  2.     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  3. </configSections>

第二步:

新建Log4Net.config的配置文件,并在其中添加下面的配置信息:

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <log4net debug="false">
  4.  
  5.   <!--按日期分割日志文件 一天一个-->
  6.   <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" >
  7.  
  8.     <!--是否续写-->
  9.     <param name="AppendToFile" value="true" />
  10.     <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  11.     <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
  12.     <param name="StaticLogFileName" value="true" />
  13.     <!--保存路径-->
  14.     <param name="File" value="d:\Log\\" />
  15.     <param name="DatePattern" value="yyyy-MM-dd.LOG" />
  16.     <param name="StaticLogFileName" value="false" />
  17.     <param name="RollingStyle" value="Date" />
  18.     <layout type="log4net.Layout.PatternLayout">
  19.       <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
  20.     </layout>
  21.   </appender>
  22.  
  23.   <!--按日志容量分割日志文件 10KB一个-->
  24.   <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" >
  25.     <!--是否续写-->
  26.     <param name="AppendToFile" value="true" />
  27.     <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  28.     <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
  29.  
  30.     <param name="StaticLogFileName" value="true" />
  31.  
  32.     <!--按照文件的大小进行变换日志文件-->
  33.     <param name="RollingStyle" value="Size" />
  34.     <param name="File" value="log.txt" />
  35.     <!--单个文件最大数量 好像只有在 按Size分割时有效-->
  36.     <param name="MaximumFileSize" value="200KB"/>
  37.     <!--保留的log文件数量 超过此数量后 自动删除之前的   好像只有在 按Size分割时有效-->
  38.     <param name="MaxSizeRollBackups" value="2" />
  39.  
  40.     <param name="StaticLogFileName" value="false" />
  41.     <layout type="log4net.Layout.PatternLayout">
  42.       <param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" />
  43.     </layout>
  44.   </appender>
  45.  
  46.   <!--记录日志到数据库-->
  47.   <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  48.     <bufferSize value="1" />
  49.     <!--缓冲大小-->
  50.     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  51.     <connectionString value="Data Source=.\SQLEXPRESS;Initial Catalog=CVDS;User ID=sa;Password=sasa" />
  52.     <commandText value="INSERT INTO Log([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
  53.     <parameter>
  54.       <parameterName value="@log_date" />
  55.       <dbType value="DateTime" />
  56.       <layout type="log4net.Layout.RawTimeStampLayout" />
  57.     </parameter>
  58.     <parameter>
  59.       <parameterName value="@thread" />
  60.       <dbType value="String" />
  61.       <size value="255" />
  62.       <layout type="log4net.Layout.PatternLayout">
  63.         <conversionPattern value="%thread" />
  64.       </layout>
  65.     </parameter>
  66.     <parameter>
  67.       <parameterName value="@log_level" />
  68.       <dbType value="String" />
  69.       <size value="50" />
  70.       <layout type="log4net.Layout.PatternLayout">
  71.         <conversionPattern value="%level" />
  72.       </layout>
  73.     </parameter>
  74.     <parameter>
  75.       <parameterName value="@logger" />
  76.       <dbType value="String" />
  77.       <size value="255" />
  78.       <layout type="log4net.Layout.PatternLayout">
  79.         <conversionPattern value="%logger" />
  80.       </layout>
  81.     </parameter>
  82.     <parameter>
  83.       <parameterName value="@message" />
  84.       <dbType value="String" />
  85.       <size value="4000" />
  86.       <layout type="log4net.Layout.PatternLayout">
  87.         <conversionPattern value="%message" />
  88.       </layout>
  89.     </parameter>
  90.     <parameter>
  91.       <parameterName value="@exception" />
  92.       <dbType value="String" />
  93.       <size value="2000" />
  94.       <layout type="log4net.Layout.ExceptionLayout" />
  95.     </parameter>
  96.   </appender>
  97.  
  98.   <root>
  99.     <level value="INFO" />
  100.     <!--启用按日期分割-->
  101.     <appender-ref ref="LogFileAppenderByDate" />
  102.     <!--启用按容量分割-->
  103.     <!--<appender-ref ref="LogFileAppenderBySize" />-->
  104.     <!--启用保存到数据库-->
  105.     <!--<appender-ref ref="AdoNetAppender" />-->
  106.   </root>
  107.  
  108. </log4net>

第三步:

在Global.asax文件中的Application_Start事件中添加如下代码:

  1.  protected void Application_Start(object sender, EventArgs e)
  2.   {
  3.        // Code that runs on application startup
  4.       log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath("Log4Net.config")));  
  5.   }

第四步:调用LOG4net 写日志

  1.          protected void Button2_Click(object sender, EventArgs e)
  2.         {
  3.                      ILog logs = LogManager.GetLogger(typeof(TEST));
  4.  
  5.            logs.Fatal("Excption:这里就是要提示的LOG信息");
  6.         }

也可以通过写一个LogHelper.cs类进行封装:

  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Web;
  5. using log4net;
  6.  
  7. namespace SBIT.Web.Class
  8. {
  9.     /// <summary>
  10.     /// 日志辅助类
  11.     /// </summary>
  12.     public class LogHelper
  13.     {
  14.         private static ILog log;
  15.         private static LogHelper logHelper = null;
  16.         /// <summary>
  17.         /// 初始化
  18.         /// </summary>
  19.         /// <returns></returns>
  20.         public static ILog GetInstance()
  21.         {
  22.             logHelper = new LogHelper(null);
  23.  
  24.             return log;
  25.         }
  26.         /// <summary>
  27.         /// 初始化
  28.         /// </summary>
  29.         /// <param name="configPath"></param>
  30.         /// <returns></returns>
  31.         public static ILog GetInstance(string configPath)
  32.         {
  33.             logHelper = new LogHelper(configPath);
  34.  
  35.             return log;
  36.         }
  37.         /// <summary>
  38.         /// 构造函数
  39.         /// </summary>
  40.         /// <param name="configPath"></param>
  41.         private LogHelper(string configPath)
  42.         {
  43.             if (!string.IsNullOrEmpty(configPath))
  44.             {
  45.                 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  46.                 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(configPath));
  47.             }
  48.             else
  49.             {
  50.                 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  51.             }
  52.         }
  53.  
  54.     }
  55. }

通过封装类写日志的方法如下:

  1.  private static readonly ILog logs = LogHelper.GetInstance(); //LogManager.GetLogger(typeof(TEST));
  2.         protected void Button2_Click(object sender, EventArgs e)
  3.         {
  4.                 logs.Fatal("Excption:这里就是要提示的LOG信息");
  5.         }

代码下载如下:

/Files/huanghai223/ReportProject_web.rar

Log4Net组件的应用详解的更多相关文章

  1. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  2. iOS 组件化流程详解(git创建流程)

    [链接]组件化流程详解(一)https://www.jianshu.com/p/2deca619ff7e

  3. React—组件生命周期详解

    React—组件生命周期详解 转自 明明的博客  http://blog.csdn.net/slandove/article/details/50748473 (非原创) 版权声明:转载请注明出处,欢 ...

  4. Vue组件通信方式全面详解

    vue组件通信方式全面详解 众所周知,Vue主要思想就是组件化开发.因为,在实际的项目开发中,肯定会以组件的开发模式进行.形如页面和页面之间需要通信一样,Vue 组件和组件之间肯定也需要互通有无.共享 ...

  5. Kubernetes学习之路(二十)之K8S组件运行原理详解总结

    目录 一.看图说K8S 二.K8S的概念和术语 三.K8S集群组件 1.Master组件 2.Node组件 3.核心附件 四.K8S的网络模型 五.Kubernetes的核心对象详解 1.Pod资源对 ...

  6. 【转载】BootStrap表格组件bootstrap table详解

    (转载,来源“脚本之家”,作者不详) 一.Bootstrap Table的引入 关于Bootstrap Table的引入,一般来说还是两种方法: 1.直接下载源码,添加到项目里面来.由于Bootstr ...

  7. 【Flutter】功能型组件之对话框详解

    前言 对话框本质上也是UI布局,通常一个对话框会包含标题.内容,以及一些操作按钮,为此,Material库中提供了一些现成的对话框组件来用于快速的构建出一个完整的对话框. 接口描述 // 1. Ale ...

  8. 中间件:ElasticSearch组件RestHighLevelClient用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础API简介 1.RestHighLevelClient RestHighLevelClient的API作为ElasticSearch备 ...

  9. Vue基础语法-数据绑定、事件处理和扩展组件等知识详解(案例分析,简单易懂,附源码)

    前言: 本篇文章主要讲解了Vue实例对象的创建.常用内置指令的使用.自定义组件的创建.生命周期(钩子函数)等.以及个人的心得体会,汇集成本篇文章,作为自己对Vue基础知识入门级的总结与笔记. 其中介绍 ...

随机推荐

  1. XML中<beans>中属性概述

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  2. UML大战需求分析——阅读笔记02

    类图是理解面向对象思想的强有力工具,也是业务概念模型分析中最常用的一种UML图.对开发人员来说,并不是对每一个业务流程都很熟练,在客户那里传达过来的需求资料中,有很多术语会把思绪搞晕,他们之间错综复杂 ...

  3. java中的final的使用

    1.final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的.在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为fin ...

  4. HDU 2069 Coin Change(完全背包变种)

    题意:给你5种银币,50 25 10 5 1,问你可以拼成x的所有可能情况个数,注意总个数不超过100个 组合数问题,一看就是完全背包问题,关键就是总数不超过100个.所有我们开二维dp[k][j], ...

  5. getFields()和getDeclaredFields()的区别

    getFields()获得某个类的所有的公共(public)的字段,包括父类. getDeclaredFields()获得某个类的所有申明的字段,即包括public.private和proteced, ...

  6. ZZULI 1876: 蛤玮的项链 Hash + 二分

    Time Limit: 6 Sec  Memory Limit: 128 MBSubmit: 153  Solved: 11 SubmitStatusWeb Board Description 蛤玮向 ...

  7. Noip2016

    <这篇是以前的,不开新的了,借版面来换了个标题> 高二了 开学一周,每天被文化课作业碾压... 但是仍然阻挡不了想刷题的心情... 对付noip2016的几块:(有点少,以后补) 高精度( ...

  8. 怎样看懂Oracle的执行计划

    怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...

  9. 【游戏开发】小白学Lua(上)

    在很多游戏中,脚本语言是不可或缺的一部分,很多游戏都使用到了Lua,js,python一类的脚本,脚本语言可以在很多方面给开发进程带来帮助.脚本语言可以作为初始化文件读入变量和游戏数据的一个快速而方便 ...

  10. jQuery对数据和对象的操作

    <script type="text/javascript" src="jquery-1.8.2.min.js"></script> & ...