Log4net的优点:

几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专

门的调试工具了。然而 一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。

日志具有以下优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;

一旦在程序中加入了 Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,

日志信息可以输出到不同的地方。

Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。

Log4net的结构

log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及

Layout(布局).

【基础】

官方网站的配置例子: http://logging.apache.org/log4net/release/config-examples.html
配置节点是由logger和appender组成的.
logger说明要使用哪些appender. appender说明日志怎样存储,如写入系统日志,文本,数据库,邮件等...

具体参见上面的链接.
appender节里有两个重要的子节点.
filter负责过滤你想要得到的日志级别或包含特殊的字符串
layout负责日志输出的样式.

【配置】

分三步:

Ⅰ.创建一个网站,引入log4net.dll
Ⅱ.项目里新建一个配置文件Log4Net.config,删除自动生成的代码,Copy下列代码到该文件.

<?xml version="1.0" encoding="utf-8"?>
<!-- 
注意: 除了手动编辑此文件以外,您还可以使用 
Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
“网站”->“Asp.Net 配置”选项。
设置和注释的完整列表在 
machine.config.comments 中,该文件通常位于 
/Windows/Microsoft.Net/Framework/v2.x/Config 中
-->
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<logger name="loggerAX">
<!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ALL" />
<appender-ref ref="SmtpAppenderAX"></appender-ref>
<appender-ref ref="FileAppenderAX"></appender-ref>
</logger>

<appender name="SmtpAppenderAX" type="log4net.Appender.SmtpAppender">
<to value="To@domain.com"></to>
<from value="From@domain.com" />
<subject value="AX'Test Log Message" />
<smtpHost value="mail.eshinfo.com" />
<username value="eshinfo" />
<password value="eshinfo" />
<bufferSize value="2048" />
<!--超长部分是否丢弃-->
<lossy value="false" />
<!--输出级别在WARN和OFF之间的日志-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="OFF" />
</filter>

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] : %

newline%message%newline" />
</layout>

</appender>

<appender name="FileAppenderAX" type="log4net.Appender.RollingFileAppender">
<!--绝对路径-->
<file value="D://AX.txt"></file>
<!--相对路径,在项目的根目录下-->
<!--以最后一个路径为准,所以上面的绝对路径下不会写日志-->
<file value="./Log/AX.txt"></file>
<!--防止多线程时不能写Log,官方说线程非安全-->
<!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<!--可以为:Once|Size|Date|Composite-->
<!--Composite为Size和Date的组合-->
<rollingStyle value="composite" />
<!--日志最大个数,都是最新的-->
<!--rollingStyle节点为Date时,该节点不起作用-->
<!--rollingStyle节点为Size时,只能有value个日志-->
<!--rollingStyle节点为Composite时,每天有value个日志-->
<maxSizeRollBackups value="10" />
<!--当备份文件时,为文件名加的后缀-->
<!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP 应该是程序上的一个bug-->
<!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->
<datePattern value="_yyyy-MM-dd.TXT" />
<!--可用的单位:KB|MB|GB-->
<!--不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="1KB" />
<!--置为true,当前最新日志文件名永远为file节中的名字-->
<staticLogFileName value="true" />
<!--输出级别在INFO和ERROR之间的日志-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="ERROR" />
</filter>
<!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->
<filter type="log4net.Filter.LevelMatchFilter">
<param name="LevelToMatch" value="WARN" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>

<!--==================layout节点的配置说明======================-->
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息  
%n(new line):换 行                                                        
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 
%t(thread id):当前语句所在的线程ID 
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等  
%c(class):当前日志对象的名称,例如: 
模式字符串为:%-10c -%m%n  
代码为:   
ILog log=LogManager.GetLogger(“Exam.Log”);  
log.Debug(“Hello”); 
则输出为下面的形式:
Exam.Log       - Hello  
%L:输出语句所在的行 号
%F:输出语句所在的文件名 
%-数字:表示该项的最小长度,如果不够,则用空格填充
例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
176 [main] INFO org.foo.Bar - Located nearest gas station.  
<!--=========================================================-->

Ⅲ.在Default.aspx.cs的Page_Load里添加如下代码.
protected void Page_Load(object sender, EventArgs e)
{
//下面两句应该放在网站刚刚启动时加载,并放在一个静态方法里方便调用
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath

("Log4Net.config")));
ILog logAX = LogManager.GetLogger("Admin"); 
//写日志
logAX.Error("Error AX");
logAX.Info("Info AX");
}
------------------------
或者在通用类库(Common)里添加log4net.dll 的引用,并添加ilog类
public class Log
    {
        
        private static log4net.ILog log = log4net.LogManager.GetLogger("Admin");
        public static void Debug(string message)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug(message);
            }
        }
        public static void Debug(System.Exception ex1)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug(ex1.Message.ToString() + "/r/n" + ex1.Source.ToString() + "/r/n" +

ex1.TargetSite.ToString() + "/r/n" + ex1.StackTrace.ToString());
            }
        }
        public static void Error(string message)
        {
            if (log.IsErrorEnabled)
            {
                log.Error(message);
            }
        }
        public static void Fatal(string message)
        {

if (log.IsFatalEnabled)
            {
                log.Fatal(message);
            }
        }
        public static void Info(string message)
        {
            if (log.IsInfoEnabled)
            {
                log.Info(message);
            }
        }

public static void Warn(string message)
        {
            if (log.IsWarnEnabled)
            {
                log.Warn(message);
            }
        }
    }
并在通用类层(Common)的assemblyinfo.cs 里加上
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
表示引用该配置文件

在其它层要写日志的时候
XXX.Common.Log.Debug(ex1);
------------------------------

F5,在项目目录下找到Log文件夹的AX.txt ,这个就是刚刚生成的日志文件.
【写日志的原则】

1.在catch后,把异常写入日志.

2.在调用第三方控件的开始和结束处.

3.在连接数据库的开始结束处.

4.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增.

5.在自己认为很重要的逻辑处写入日志.

【注意】

发现有重要问题时最好用邮件日志,但不要指望上面的邮件配置节能发日志.
要使用能用的smtp服务器,163的只有部分用户能用.我的就不能用,很是郁闷.

要合理配置下列参数.

Ⅰ.日志文件的大小
Ⅱ.备份的日志名样式,最好时间精确到分

例子:
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<!--定义输出到文件中-->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<!--定义文件存放位置-->
<file value="log4netfile.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HH:mm:ss" />
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末尾的文字说明-->
<footer value="Wen" />
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%

logger property:[%property{NDC}] - 错误描述:%message%newline" />
</layout>
</appender>
<!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。

-->
<root>
<!--文件形式记录日志-->
<appender-ref ref="LogFileAppender" />
<!--如果不启用相应的日志记录,可以通过这种方式注释掉-->
<!--<appender-ref ref="AdoNetAppender_Access" />-->

</root>

</log4net>
</configuration>

using log4net;

//创建日志记录组件实例
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//记录错误日志
log.Error("error", new Exception("发生了一个异常"));
//记录严重错误
log.Fatal("fatal", new Exception("发生了一个致命错误"));
//记录一般信息
log.Info("info");
//记录调试信息
log.Debug("debug");
//记录警告信息
log.Warn("warn");
Console.WriteLine("日志记录完毕。");
Console.Read();

我见过的最完善的log4net配置的更多相关文章

  1. (转载)非常完善的Log4net配置详细说明

    一.前言 在项目中,对项目的日志收集是非常重要的,这里我就说说代码的异常日志收集.收集异常日志,有很多第三方成熟的框架,我这里就介绍一下我常用的Log4net. Log4Net介绍 Log4net 是 ...

  2. (转)非常完善的Log4net详细说明

    转自:http://www.cnblogs.com/zhangchenliang/p/4546352.htmlhttp://www.cnblogs.com/zhangchenliang/p/45463 ...

  3. Log4Net配置以及使用

    跟踪程序代码,及时发现程序的运行状态,是每个成熟的软件所必不可少的一个环节,网站发布到真实的环境之后,对于程序的运行状态,我们并不能想开发环境那也,点击调试.日志记录显示就尤为重要,在.NET中记录日 ...

  4. Common.Logging log4net Common.Logging.Log4Net 配置

    1.log4net 单独配置 log4net支持多种格式的日志输出,我这里只配置输出到本地的txt文件这种格式. <log4net> <root> <appender-r ...

  5. Log4Net 配置StmpAppender

    目录 Log4Net 配置StmpAppender    1 1.前言    1 2.详细配置    1 1.StmpAppender配置    1 2.Root 配置    2 3.更多选项     ...

  6. C# Log4Net配置

    Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...

  7. Log4net配置与使用简要说明

    log4net详细配置:http://logging.apache.org/log4net/本文描述如有错误,以官网的说明为准;p 一:先来看看log4net中的几个概念: 1. log4net继承机 ...

  8. MVC Log4Net 配置

    1.引用log4net.dll 2.在项目根目录下增加log4.config文件 <?xml version="1.0"?> <configuration> ...

  9. ASP.NET MVC学习之Log4Net配置(日志记录)

    Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...

随机推荐

  1. css -- css选择器

    选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname 选择 id="firstna ...

  2. CentOS Linux 下安装Samba

    一.Samba简介: Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.Linux中搭建环境有几个需要使用的软件包: (1)samba-client:这个 ...

  3. 【Java NIO的深入研究1】缓冲区

    缓冲区 传统的流和通道的对比 流 通道 慢 快 处理简单 处理复杂 单字节的传输 一块数据的传输 - Java.io.*已经重新写过 - 是对流的模拟 单向的 双向的 可直接访问 必须通过Buffer ...

  4. Chrome浏览器无法观看视频,一直提示“adobe flash player 已过期” ?

       很多新用户在安装了Chrome浏览器或者更新过的的时候,经常提示“ adobe flash player 已过期”的问题,反复提示,导致无法观看视频.于是从网上也找了很多办法都没有解决.这里给大 ...

  5. Linux中的SELinux详解--16

    SELinux 宽容模式(permissive) 强制模式(enforcing) 关闭(disabled)  几种模式之间的转换 在CentOS6.2 中安装intel 的c++和fortran 的编 ...

  6. Android 6.0启动过程具体解析

    在之前的一篇文章中.从概念上学习了Andoird系统的启动过程.Android系统启动过程学习 而在这篇文章中,我们将从代码角度细致学习Android系统的启动过程,同一时候,学习Android启动过 ...

  7. Java输入输出流(2)

    6. Java.IO流类库 1. io流的四个基本类 java.io包中包括了流式I/O所须要的全部类. 在java.io包中有四个基本类:InputStream.OutputStream及Reade ...

  8. EF的代码优先设计

    CodeFirst 用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库 接下来用学生这个例子来演示,有学生表,课程表,和成绩表三张表 首先是M ...

  9. 测试用例和BUG描述规范

    欢迎关注我的公众号,了解更多的测试知识:[软件测试经验与教训] 一一BUG描述基础知识 Bug标题中需包含Bug的具体位置并以[]标注 举例:[模块-子模块-页面]XXXXXXXXXXXX Bug标题 ...

  10. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)

    Nodejs学习文档整理 http://www.cnblogs.com/xucheng/p/3988835.html 1.nodejs是什么: nodejs是一个是javascript能在后台运行的平 ...