整理下log4net日志

今天整理了下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="100" />
  <!--连接组件类型-->
  <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。



原文地址:https://www.cnblogs.com/zousc/p/11152981.html

时间: 2024-10-10 14:45:26

整理下log4net日志的相关文章

log4net日志分割,按大小分割

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

关于log4net日志的配置流程

最近又重新整理一下log4net日志的配置,现在记录一下流程和一些遇到的问题,以备后续使用,具体的配置参数等信息.此文无,见谅! 1. 下载log4net.dll文件(网上很多,随便找一个!) 2. 项目中引用此dll 3. appconfig中配置log4net(具体配置方案有很多例子.) 4. AssemblyInfo.cs 中添加"[assembly: log4net.Config.XmlConfigurator(Watch = true)]" 5. winform中调用&quo

log4net在XP下,日志信息无法记录的问题

系统采用的是LOG4Net日志组件,在win7下一切正常,但是在XP下却发现日志一致记录不了,匪夷所思.然后我就鬼使神差的把这个自己觉得没用的记录项property:[%property{NDC}]给删除了 然后再打开系统 神奇发生了 日志成功记录了 OK了.奇怪 奇怪 真奇怪 原文地址:https://www.cnblogs.com/xiaoxihebei/p/8510673.html

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

项目:后台管理平台 意义:项目开发中提出增加日志功能,对关键的操作.程序运行中的错误信息进行记录,这对程序部署后的调试有很大意义. 注:本文非原创,只是对网上搜集的信息进行了整合,以备今后查询. 一.最快速的上手步骤 1.用 NuGet来添加log4net 2.在项目根目录下的Web.config中添加节点.在 <configSections> 节点下添加对log4net的引用, <configSections> <section name="log4net&quo

如何在通用权限管理系统中集成log4net日志功能

开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个组件的介绍 ”Log4net是基于.net开发的一款非常著名的记录日志开源组件.最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源, 于另外的一个非常著名的姐妹组件-log4j.现由Apache组织开发与维护.此日志架构是可灵活扩展,且通过配置文件来设置日志的属性及输出,

ASP.NET使用log4Net日志组件教程(按日期与按日志大小切割)

对于一个大型网站与系统来说,日志是必备的工具,通过日志你可以非常清楚程序的运行情况,及时得到反馈来解决问题,下面介绍ASP.NET版本的log4Net日志组件是个非常强大的工具,最新版本for .net2.0 1.2.10.0 本人搞了一天,终于知道搞清楚怎样使用了,简单记录一下. 以下介绍的方法是log4net使用单独的配置文件的. 开始行动: 第一步:在项目引用log4net.dll文件 第二步: 在Web.config文件中加入一句代码,位置如下: <configuration>   

Log4net日志文件自动按月份存放和日志独占问题的解决

让log4net日志文件自动按月份存放 log4net日志文件的作用还真不小,可以保存管理员.用户对数据库的任何操作,保存管理员和用户的登录记录,分析系统运行错误,所以不舍得随便将日志文件Delete.如果时间长了,日志文件夹一定会有很多很多日志文件,不便于管理员查看. 所以让log4net日志文件自动按月份存放是必须的,其实方法很Easy,额是突发奇想在DatePattern value中增加“yyyyMM\\”,运行后果然如额所愿. 也就是修改Web.Config文件如下: <file va

Log4net 日志使用指南

1           简介 1.1          Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题. 经验表明,日志记录往往是软件开发周期中的重要组成部分.它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug:一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预.另

Log4Net日志记录两种方式

本文转载:http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.     log4net是Apache软件基金会Apache Logging Services工程的一部分.Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务.(f:百度百科) 原理 Log4ne