• 《Log4net写出适合自己的日志类》第二篇【没有理论的实践是盲目】


    第一篇中,已经真刀实枪用log4net干过了一次。也是希望大家能先感受到什么是log4net。但是只没有理论的实践肯定是盲目的,所以这一篇,

    咱们好好谈谈log4net的配置等其他信息


    log4net来源

        log4net是Apache软件基金会Apache Logging Services工程的一部分。Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务。

    详细说明,源码下载 可以参考官网:http://logging.apache.org/log4net/   

    Apache Logging Services工程其他项目:http://logging.apache.org/ 

    log4net能干哪些活?

        一个项目无论多么nb,要是我们用不着,那基本和我们无关。所以你要用它之前,得知道他能干哪些活。

    首先log4net是用来写日志的。主要特性如下:

    • log4net 可实现速度优化。
    • log4net 基于已命名日志记录器层次结构。
    • log4net 是失败即停,但没有依懒性。
    • log4net 是线程安全的。
    • log4net 并不限于一组预定义的设施。可以在运行时使用一个配置文件设置日志记录行为。配置文件是 XML 格式。
    • log4net 被设计来处理从一开始的异常。
    • log4net 可以其输出定向到许多汇包括: 文件、 控制台、 windows事件日志或电子邮件。
    • log4net 分类分为级别的日志记录: DEBUG, INFO, WARN, ERROR and FATAL.。
      日志输出的格式可以通过实现一个新的布局类很容易改变。 通过编写一个新的附加类可改变的日志输出,以及写作策略目标。
    • log4net 支持多个输出附加目的地每记录器。

    主要作用我已经标记背景色,它还可以将日志输出到数据库中【Sqlserver、Access, Oracle、DB2,SQLite】

    以上的特性和log4net日志能输出位置,我相信在我们编程中,基本都能满足写日志的需求了。

    它还有个特性,就是学习成本也低。   在第一篇中,我们也看到了,只需要一个log4net.dll和配置文件一份,就可以直接输出日志了。

    那么接下来,我们分析下配置文件的具体作用。

    log4net结构和配置文件分析

        ps:配置文件可以自定义文件名,也可以写在程序自带的app.config/web.config。


     主要结构:

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

    作用分析:

     Logger(记录器): 是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。

     Repository(库):主要用于负责日志对象组织结构的维护。

       Appender(附着器):  定义输出介质。例如:输出到文件、控制台、数据库、windows事件日志、电子邮件等。

     Layout(布局):格式化日志信息。例如:你想做日志信息中增加当前时间,log4net都有字符代替。[较抽象,看后面具体操作即可]


     配置文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
      </configSections>
      <log4net>
          <!--appender节点的name可以自定义,但是root节点下的appender-ref节点的ref属性必须对应apperder的name-->
        <!--appender节点和apperder-ref节点应该一一对应-->
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
        <root>
          <!--====控制台控制显示日志====-->
         <appender-ref ref="ConsoleAppender" />
        </root>
      </log4net>
    </configuration>

    上面的配置我们主要关注appender节点和root节点。其余节点节本暂时不用管。

    apperder(附着器):type属性决定日志输出的具体位置。

    AdoNetAppender:针对数据库输出(MS SQL Server,MS Access,Oracle9i,Oracle8i,IBM DB2,SQLite)
    AspNetTraceAppender:在AspNetTraceAppender记录消息
    BufferingForwardingAppender:缓冲消息,然后输出到apperder
    ColoredConsoleAppender:将消息发送到控制台,可以设置背景、字体颜色
    ConsoleAppender:将消息发送到控制台
    EventLogAppender:将消息发送到应用程序的事件中
    FileAppender:将日志写入文件中
    ForwardingAppender:详细看官网说明。
    ManagedColoredConsoleAppender:可以用来突出显示错误消息
    MemoryAppender:内存流附着器
    NetSendAppender:详细看官网说明
    OutputDebugStringAppender:将日志写入OutputDebugString API
    RemotingAppender:将日志传递给remoting
    RollingFileAppender:以FileAppender为基础,可以设置按时间或大小重新覆盖日志。
    SmtpAppender:通过smtp电子邮件发送日志
    SmtpPickupDirAppender:类似smtp,详细可以看官网说明。
    TraceAppender:将日志写入.net 基类库提供的跟踪系统(System.Diagnostics.Trace )
    UdpAppender:发送到RemoteAddress 上指定 RemotePort。
    DynamicPatternLayout:详细看官网说明。
    apperder类型

    以上都是我的概括,有些不好概括的,就没有写,怕误导大家。

    大家也可以参考官网说明(有具体的配置信息) http://logging.apache.org/log4net/release/config-examples.html

    如果有概括的更好的,也希望和我分享:z13qu#sina.com


    接下来分析下特殊字符:

    在apperder的layout下的conversionPattern 中,可以发现有很多你并不太明白的字符

    "%date [%thread]"
    让我们来具体看看它们的意思:

    %m(message):日志具体内容(第一篇中写的  consoleLoger.Info("这是一行日志");  "这是一行日志"就是%m的内容)

    %n(new line):换行

    %d(datetime):输出当前语句运行的时刻

    %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

    %t(thread id):当前语句所在的线程ID

    %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

    %c(class):当前日志对象的名称

    %L:输出语句所在的行号

    %F:输出语句所在的文件名

    %-数字:表示该项的最小长度,如果不够,则用空格填充

    想在回过头来看第一篇的配置文件和输出内容,是否能看明白了呢?

    这一篇基本了解了大部分的理论和配置。下一篇,开始通过源码来讲解具体的使用过程。我也会将大部分的注释写在源码中。
    希望在实践操作中,感受到最真实的log4net。

  • 相关阅读:
    电子招投标应用系统连载(一)-开标系统
    js实现一个简单钟表动画(javascript+html5 canvas)
    ,net core mvc 文件上传
    echarts显示X轴最后一个lable
    C# 解压gzip文件(.tgz)
    【转】C#计算两坐标点距离
    用file标签实现多图文件上传预览
    c#数据批量插入
    Asp.net 中ViewState,cookie,session,application,cache的比较
    ASP.NET MVC从请求到响应发生了什么
  • 原文地址:https://www.cnblogs.com/xiaofeiniu/p/4699050.html
Copyright © 2020-2023  润新知