log4net是一款优秀的第三方日志框架,可以很容易的加载到开发项目中(引用log4net的dll,再配置些基本参数即可),帮助程序员把日志信息输出到各种不同的目标,常见的有文本、数据库、windows日志、邮件、内存缓冲区等目标。

首先需要log4net的dll(源码中dll版本是1.2.10.0),引用到程序中,然后再配置下配置文件,配置文件如下:

  1. <?xml version="1.0"?>
  2. <configuration>
  3. <configSections>
  4. <section name="log4net"
  5. type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  6. </configSections>
  7. <!--站点日志配置部分-->
  8. <log4net>
  9. <root>
  10. <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
  11. <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
  12. <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
  13. <level value="ERROR"/>
  14. <appender-ref ref="RollingFileAppender"/>
  15. </root>
  16. <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  17. <!--日志文件名开头-->
  18. <file value="c:\Log\TestLog4net.TXT"/>
  19. <!--多线程时采用最小锁定-->
  20. <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  21. <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
  22. <datePattern value="(yyyyMMdd)"/>
  23. <!--是否追加到文件,默认为true,通常无需设置-->
  24. <appendToFile value="true"/>
  25. <!--变换的形式为日期,这种情况下每天只有一个日志-->
  26. <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
  27. <!--<rollingStyle value="Date"/>-->
  28. <!--变换的形式为日志大小-->
  29. <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
  30. <RollingStyle value="Size"/>
  31. <!--每天记录的日志文件个数,与maximumFileSize配合使用-->
  32. <MaxSizeRollBackups value="10"/>
  33. <!--每个日志文件的最大大小-->
  34. <!--可用的单位:KB|MB|GB-->
  35. <!--不要使用小数,否则会一直写入当前日志-->
  36. <maximumFileSize value="2MB"/>
  37. <!--日志格式-->
  38. <layout type="log4net.Layout.PatternLayout">
  39. <conversionPattern value="%date [%t]%-5p %c - %m%n"/>
  40. </layout>
  41. </appender>
  42. </log4net>
  43. </configuration>

然后代码如下:

  1. using System;
  2. using System.Reflection;
  3. using log4net;
  4. using log4net.Config;
  5. namespace Log4Net1001
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. Console.WriteLine("Begin Run");
  12. XmlConfigurator.Configure();
  13. Type type = MethodBase.GetCurrentMethod().DeclaringType;
  14. ILog m_log = LogManager.GetLogger(type);
  15. m_log.Debug("这是一个Debug日志");
  16. m_log.Info("这是一个Info日志");
  17. m_log.Warn("这是一个Warn日志");
  18. m_log.Error("这是一个Error日志");
  19. m_log.Fatal("这是一个Fatal日志");
  20. Console.WriteLine("End");
  21. Console.ReadLine();
  22. }
  23. }
  24. }

运行结果,在c:\Log\TestLog4net.TXT文件中写了如下信息:
        2013-10-01 22:35:53,793 [10]ERROR Log4Net1001.Program - 这是一个Error日志
        2013-10-01 22:35:53,802 [10]FATAL Log4Net1001.Program - 这是一个Fatal日志

其中layout节点的配置说明:
        %m(message):输出的日志消息;
        %n(newline):换行;
        %d(datetime):输出当前语句运行的时刻;
        %r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数;
        %t(threadid):当前语句所在的线程ID ;
        %p(priority): 日志的当前日志级别;
        %c(class):当前日志对象的名称;
        %L:输出语句所在的行号;
        %F:输出语句所在的文件名; 
        %-10:表示最小长度为10,如果不够,则用空格填充;

2.当configSections节点没有放在configuration节点下的第一个节点时,编译时不会报警告,但运行时不会记日志。这是因为自定义的节点configSections这个必须放在第一个,这是app.config文件的语法规定;

3.对于大量记日志的程序,需注意配置RollingStyle值为Composite,且设置MaxSizeRollBackups(每天记录的日志文件个数)和maximumFileSize(每个日志文件的最大大小)。我以前遇过一次日志过大的问题,有一次版本临时发布就改了一个方法而没有经过测试,造成每天记几十G日志的,几天就把服务器磁盘弄满了。

4.当发现不记日志时,可从两方面调查问题,一是log4net有没有初始化,也就是XmlConfigurator.Configure();二是看level节点的配置是不是正确;

5.当发现一些设置参数没有起作用时,请检查是不是同一个节点被设置过多次,当被重复设置时,log4net会选择最后一个作为实际的设置。例如设置记录日志的级别设置两次如<level value="ERROR"/><level value="All"/>,则最终会以ALL作为记录日志的级别。

6.如果是网站项目,须在项目中的AssemblyInfo.cs文件的最后一行中添加:

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

本文转至:http://blog.csdn.net/pfe_nova/article/details/12225349

[转]Log4Net日志插件配置详解的更多相关文章

  1. maven常用插件配置详解

    常用插件配置详解Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</proje ...

  2. java log4j基本配置及日志级别配置详解

    java log4j日志级别配置详解 1.1 前言 说出来真是丢脸,最近被公司派到客户公司面试外包开发岗位,本来准备了什么redis.rabbitMQ.SSM框架的相关面试题以及自己做过的一些项目回顾 ...

  3. Maven 变量及常见插件配置详解

    Maven 的 pom.xml 常用 变量 插件 配置 详解 一.变量 - 自定义变量及内置变量 1. 自定义变量 <properties> <project.build.name& ...

  4. Log4j 日志操作包配置详解

    log4j简介 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...

  5. Maven变量及常见插件配置详解(转)

    一.变量-自定义变量及内置变量 1.自定义变量 <properties> <project.build.name>tools</project.build.name> ...

  6. Spring Boot 系列:日志动态配置详解

    世界上最快的捷径,就是脚踏实地,本文已收录架构技术专栏关注这个喜欢分享的地方. 开源项目: 分布式监控(Gitee GVP最有价值开源项目 ):https://gitee.com/sanjianket ...

  7. nginx 日志管理配置详解

    nginx的日志管理 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$statu ...

  8. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  9. webpack4配置详解之常用插件分享

    前言 继上一次webpack的基础配置分享之后,本次将分享一些工作中项目常用的配置插件.也会包含一些自己了解过觉得不错的插件,如有分析不到位的,欢迎纠错,嗯,这些东西文档都有,大佬可绕过. Wepac ...

随机推荐

  1. H5实现页面内跳转页面

    <!DOCTYPE html><html><body> <iframe src="/example/html/demo_iframe.html&qu ...

  2. httpclient 用法

    链接地址 https://www.cnblogs.com/mykcode/p/7833090.html 在程序用调用 Http 接口.请求 http 资源.编写 http 爬虫等的时候都需要在程序集中 ...

  3. 【Cocos2d-Js实战教学(1)横版摇杆八方向移动】

    本教程主要通过搭建一个横版摇杆八方向移动的实例,让大家如何用Cocos2dx-Js来做一款游戏,从基础了解Cocos2dx-Js的基本实现原理,从创建工程,到各个知识点的梳理. 教程分为上下两讲: 上 ...

  4. AtomicInteger源码解析

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.原子类 可以实现一些原子操作 基于CAS 下面就以AtomicInteger为例. 2.AtomicIn ...

  5. S11 day 97 -98天 Luffycity项目

    1. 建模 from django.db import models from django.contrib.contenttypes.fields import GenericForeignKey, ...

  6. Day 38 Semaphore ,Event ,队列

    什么是信号量(multiprocess.Semaphore) 互斥锁同时只允许一个线程更改数据,而信号量semaphore是同时允许一定数量的线程更改数据. 假设商场里有4个迷你唱吧 ,所以通过同时可 ...

  7. 801. Minimum Swaps To Make Sequences Increasing

    We have two integer sequences A and B of the same non-zero length. We are allowed to swap elements A ...

  8. Python 断言 assert 的用法

    assert 后边接的表达式的返回值必须是布尔值 assert expression, "对错误的描述信息" 如果expression表达式返回的是True, 程序正常执行, 如果 ...

  9. $_SERVER[]数组解析

    $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果.__FILE__ 常量包含当前(例如包含)文件的绝对路径和文件名. 如果 PHP 以命令行方式运行,该 ...

  10. jvm内存结构(一)(结构总览)

    jvm内存结构:<Java虚拟机原理图解>3.JVM运行时数据区 程序计数器: ,是执行的字节码的行号指示器,记录的是正在执行的虚拟机字节码指令的地址. ,每个线程都有独立计数器,互不干扰 ...