log4net的由浅到更浅

前言:log4net是个比较简单实用的日志记录工具,引用Dll,设置好配置文件,实例化对象,了解一下其中的组件和原理,就可以上手了。

学习原因:像我这种独行的散修不同于你们世家的弟子,有那么多的资源和导师。刚开始的时候我并不在呼和了解日志这个东西,自己的程序也都是直接F11一步步调试。但是当程序发布到服务器的时候的我就发现了,由于程序运行的环境变了,在本地好好的,在服务器就不行了。咱总不能在服务器装个VS 然后一步步调试去啊。

探索历程:

1.在Global中的Application_Error()方法中向一个文本写入日志(问题:并发上锁其他人要等待)。

2.错误存入集合,Application_Error()方法中读取集合,然后存入文本。(问题:不够装逼)

3.错误存入队列,开启一个线程,负责从队列中取出,然后存入文本。(后面博客中有讲解)

4.log4net(简单容易上手,信息可以输出到控制台,文本中)

5.使用Redis与Log4Net完成分布式日志记录(后面博客中有讲解)

 简单介绍

Log4net(Log For Net,也有Log For Java)是Apache开源的应用于.Net框架的日志记录工具,其精髓在于蓄千刃之势,动指之间

 Logger:日志记录对象

Appender:日志记录目标

Repository :库

Layout:布局

声明一个配置文件对log4net进行配置(可以在web.confg中配置,但是会显得繁琐)

<log4net>   

    <root>

      <level value=" DEBUG" />

      <appender-ref ref="LogFileAppender" />

      <appender-ref ref="ConsoleAppender" />

    </root>

    <logger name="testApp.Logging">

      <level value="DEBUG"/>

    </logger>

    <appender name="LogFileAppender"  type="log4net.Appender.FileAppender" >

      <param name="File" value="c://log-file.txt" />

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

      <layout type="log4net.Layout.PatternLayout">

        <param name="Header" value="[Header]/r/n"/>

        <param name="Footer" value="[Footer]/r/n"/>

        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n"     />

      </layout>

      <filter type="log4net.Filter.LevelRangeFilter">

        <param name="LevelMin" value="DEBUG" />

        <param name="LevelMax" value="WARN" />

      </filter>

    </appender>

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >

      <layout type="log4net.Layout.PatternLayout">

        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />

      </layout>

    </appender>

  </log4net>

 在Properties.cs中指向这个配置文件[assembly:log4net.Config.DOMConfigurator(ConfigFile="config/log4net.config",Watch=true)]

配置中的appender就是指定了这个日志的输出方式,c://log.txt运行后C盘也会多一个文件log.txt 文件夹

 使用的时候:: private static ILog log = LogManager.GetLogger(typeof(当前类名));

log.Debug(string.Formt("异常:{0}","我主动抛出异常")) 

    我们会以类(class)的类型(type)为参数来调用GetLogger(),

           传递的类(class)的类型(type)可以用typeof(Classname)方法来获得

    上面的typeof用于获取类型的 System.Type 对象.获取指定类的类对象。。这样就可以通过类对象获取其他信息。如类是不是抽象类,位于哪个程序集等等

           当然,还有很多用法和配置请参考教程视频::

      百度网盘:链接: http://pan.baidu.com/s/1c1EyiL6 密码: bjug

参考文档:

http://www.cnblogs.com/Raymond201508/p/4934322.html

http://blog.csdn.net/daichenghua/article/details/4806688

感谢以上的作者。

原文地址:https://www.cnblogs.com/liuwenxu/p/6296352.html