今天整理了下log4net日志,记录一下。。。

日志是一个系统排错的重要组成,有在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net、NLog、CommonLogging......

说下Log4net,它是.net平台上的一个日志框架,我接触的时间也不长,但是看着各开源库都在用这个于是前段时间也尝试去了解了一下,然后在自己的练手项目上试试看。

首先让我认识到Log4net强大的地方就是它的多目标输出,可以输出到控制台、文件、数据库、系统事件、Email等,几乎无所不能。然后它可以通过配置让日志系统实时生效,比如说在服务运行的过程中修改配置改变输出目标,改变日志等级等,均不用重启程序。但是Log4net也有一个让我比较头痛的地方就是感觉配置过于复杂,根本记不住,每次都必须去查阅资料。

先说下Log4net的基本配置结构:

<?xml version="1.0"?>
<configuration>   <configSections>
  <!--log4配置节-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>   <log4net>
    
     </log4net>
</configuration>

基本都机构就是这样 ,configuration节点里面包含configSection、log4net,这两个节点需要放在最前面。

接下来就是配置了☞<?xml version="1.0"?>

<configuration>

  <configSections>
  <!--log4配置节-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>   <log4net>
    <!--根配置-->
    <root>       <!--日志级别:可选值: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL -->       <level value="ALL"/>       <!--输出到调试日志: Debug.log-->
      <appender-ref ref="DebugAppender"/>
      <!--输出到信息日志: Info.log-->
      <appender-ref ref="InfoAppender"/>
       
        <!--假装这里有多种日志--> 

      <!--数据库日志--> 
      <!--<appender-ref ref="SqlAppender"/>-->
    </root>
  </log4net>
</configuration>

在log4net节点中有root根节点(log4net节点下支持的子元素有:appender,logger,renderer,root,param ,其中root只能有一个,其他的0个或多个),root节点下有一个<level value="ALL"/>节点,它表示日志级别为ALL(ALL级别最低,可记录日志级别高于它的级别)

<!--日志级别:可选值: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL --> 

appender-ref节点都ref是要引用的appender的名字,下文中的appender name="DebugAppender"就是对于<appender-ref ref="DebugAppender"/>这个级别都输出日志的配置。

接下来就是各级别的详细输出配置:

<configuration>

  <configSections>
  <!--log4配置节-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>   <log4net>
    <!--根配置-->
    <root>       <!--日志级别:可选值: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL -->       <level value="ALL"/>       <!--输出到调试日志: Debug.log-->
      <appender-ref ref="DebugAppender"/>
      <!--输出到信息日志: Info.log-->
      <appender-ref ref="InfoAppender"/>
       
        <!--假装这里有多种日志-->       <!--数据库日志-->
      <!--<appender-ref ref="SqlAppender"/>-->
    </root>

     <!--Debug.log-->
     <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender,log4net">
       <!--过滤-->
      <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="DEBUG" />
      <param name="LevelMax" value="DEBUG" />
      </filter>
      <!--目录路径,可以是相对路径或绝对路径-->
      <param name="File" value="c:/log/manage/debug/"/>
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM-dd/&quot;debug.log&quot;"/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--写到一个文件-->
      <staticLogFileName value="false"/>
      <!--单个文件大小。单位:KB|MB|GB-->
      <maximumFileSize value="2MB"/>
      <!--最多保留的文件数,设为"-1"则不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日志格式-->
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message"/>
      </layout>
     </appender>

  </log4net>
</configuration>

注意<appender></appender>节点都type,RollingFileAppender代表的是将日志以回滚文件的形式写到文件中,想这样类型很多,网上搜下就找得到,按照情况配置类型即可。

然后配置过滤级别、文件地址、文件名、是否写入到一个文件中、文件大小、文件数。

然后是日志格式,可以像这样自己定义一个格式:

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
</layout>

别急!!!还有一个数据库日志:

<appender name="SqlAppender" type="log4net.Appender.AdoNetAppender">

  <filter type="log4net.Filter.LevelRangeFilter">
    <param name="LevelMin" value="INFO"/>
    <param name="LevelMax" value="FATAL"/>
  </filter>   <!--缓冲区大小,值为100表示输出日志达到100条时才一次写入数据库,1表示不缓存-->
  <bufferSize value="" />
  <!--连接组件类型-->
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <!--连接字符串-->
  <connectionstring value="server=.\sql2005;database=Log;uid=sa;pwd=123" />
  <!--SQL语句-->
  <commandText value="INSERT INTO SysLogs
    ([Date],[Thread],[Level],[Logger],[Message],[Exception])
     VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>

注意type是AdoNetAppender,然后下面配置过滤级别缓冲区、链接组件类型、数据库的连接字符串、SQL语句;

SQL语句下面都parameter节点是获取日志中的信息给到SQL。

												

整理下log4net日志的更多相关文章

  1. 关于log4net日志的配置流程

    最近又重新整理一下log4net日志的配置,现在记录一下流程和一些遇到的问题,以备后续使用,具体的配置参数等信息.此文无,见谅! 1. 下载log4net.dll文件(网上很多,随便找一个!) 2. ...

  2. log4net日志分割,按大小分割

    最近写了一个socket通信的手表在线服务端,在日志方面,记录下Log4net日志分割 1.引入log4net.dll 2.web.config添加configsection handler 映射: ...

  3. .Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行)

    .Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行) 遇到个诡异的问题,项目发布并寄宿到 IIS上后,Log4Net没有日志输出 1.原因分析 这不应该啊,所有的配置 ...

  4. [.Net MVC] 使用 log4net 日志框架

    项目:后台管理平台 意义:项目开发中提出增加日志功能,对关键的操作.程序运行中的错误信息进行记录,这对程序部署后的调试有很大意义. 注:本文只是对网上搜集的信息进行了整合,以备今后查询. 关键字:.N ...

  5. 如何让Log4net日志文件按每月归成一个文件夹,StaticLogFileName参数的用法

    想要让Log4net日志(以下称日志)按每月自动归类为一个文件夹,为此,学习和修改了log4net.config文件.查了资料,重点是以下这些参数:      <param name=" ...

  6. Log4net 日志使用介绍

    概述 Log4net 有三个主要组件:loggers,appenders 和 layouts.这三个组件一起工作使得开发者能够根据信息类型和等级(Level)记录信息,以及在运行时控制信息的格式化和信 ...

  7. LOG4NET日志配置及使用

    Log4net的安装 Install-Package log4net 1.先弄个日志记录的类 /// <summary> /// 使用LOG4NET记录日志的功能,在WEB.CONFIG里 ...

  8. C#中使用Log4net日志输出到本地文件、Textbox或Listview

    网上很多配置log4net的方法,但是排行靠前的 根本就没有说明清除,导致浪费了两个小时来搞清楚如何配置,真是无语,特写此文,给那些刚接触log4net的朋友 1.参考链接:http://blog.s ...

  9. log4net日志功能使用

        早就想了解下log4net这个组件的使用,直至今日才有时间学习了一下,现在把学习的新的总结如下: (1).在项目中添加log4net.dll引用.说明:该版本是1.2.10.0 ,log4ne ...

随机推荐

  1. django2.2(一)

    限制请求method 什么是method 1.通常客户端请求服务器获取资源为GET方式 2.客户端提交数据给服务器端数据为POST方式 method限制请求 如果要限制请求,比如客户端只允许用GET方 ...

  2. CentOS6.7编译安装mysql5.5(详解编译选项)

    注意!  mysql5.5之前一般都是用make编译 mysql5.5 -5.6 一般都是用cmake编译 cmake : 跨平台编译器, mysql官方提供的rpm包 mysql-client :提 ...

  3. Django-Model操作数据库

    查询 models.UserInfo.objects.all() models.UserInfo.objects.all().values('user') #只取user列 models.UserIn ...

  4. 架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)

    作者 | JackTian 微信公众号 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066)备注:来自博客园 1.什么是 LAMP 架构? LAMP 架 ...

  5. webpack 的安装与使用

    这里使用webpack4.41.2 为例 一.安装webpack 1.本地安装,安装最新版本或特定版本 npm install --save-dev webpack npm install --sav ...

  6. 【Linux】netstat命令

    https://www.cnblogs.com/ftl1012/p/netstat.html这个讲的不错 https://www.linuxprobe.com/netstat-common-metho ...

  7. 8259A的初始化(多片)

    1.主从式8259A的初始化设置: 初始化设置如下: (1)中断触发方式:边沿触发 (2)中断屏蔽方式:常规屏蔽方式,即使用OCW1向IMR写屏码 (3)中断优先级排队方式:固定优先级的完全嵌套方式 ...

  8. python3中“->”的含义

    ->:标记返回函数注释,信息作为.__annotations__属性提供 __annotations__属性是字典.键return是用于在箭头后检索值的键.但是在Python中3.5,PEP 4 ...

  9. [RN] 阿里 ant-design 菜单比较丰富 https://github.com/ant-design/ant-design-mobile

    阿里 ant-design  菜单比较丰富 https://github.com/ant-design/ant-design-mobile 天和风雨顺 地和五谷丰 人和事业旺 家和万事兴

  10. prototype、__proto__、constructor

    prototype:每个函数都有一个prototype属性,这个属性指向一个对象,这个对象叫原型对象. 作用:节约内存.扩展属性和方法.可以实现类之间的继承 __proto__:每个通过构造函数new ...