记录日志框架:log4net使用

一、log4net简介

Log4net是Apache下一个开放源码的项目,我们可以控制日志信息的输出目的地。
Log4net中定义了多种日志信息输出模式。
在做项目的时候最头疼的是在程序发布到正式环境之后出现了问题,我们不能调试而且问题很难找到,于是我们需要大量的日志数据来精确的跟踪程序的运行状态。
Log4net可以帮我们来解决这一个难题,对于日志的输出我们不需要人为的去干涉,它可以根据需要将日志输出到控制台、文本文件、Windows日志事件查看器、数据库、邮件等位置,以便我们快速跟踪程序bug。

二、log4net结构
log4net主要分为5个核心组件:Logger、APPender、Filter、Layout、Object Render。

1、Logger:
   主要用于记录日志的分类和控制日志的级别。它可以以多种格式输出日志信息,同时它也可以控制日志的输出级别。
2、APPender:
   这里我们简单称之为“附着器”,意思就是说日志的输出必须依赖于它,更确切的说以文本形式输出,还是控制台格式输出都必须要依靠它来控制。log4net定义了多种附着器:
(1)AdoNetAppender:将日志记录到数据库中,可以采用SQL和存储过程两种方式。
(2)FileAppender:将日志写到文件中。
(3)MemoryAppender:将日志存到内存缓冲区。
(4)ConsoleAppender:将日志输出到控制台。
(5)EventLogAppender:将日志写到Windows Event Log中。
(6)ANSIColorTerminalAppender:在ANSI窗口终端写下高亮度的日志事件。
(7)ASPNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
(8)BufferingForwardingAppender:在输出到Appenders之前先缓存日志事件。
(9)RollingFileAppender:将日志以回滚文件的形式写到文件中。
(10)SmtpAppender:将日志写到邮件中。
3、Filter:
  Appender是将日志以缺省值的方式输出,意思就是按照默认值的方式输出。而Filter意思是过滤器,使用Filter可以将日志以不同的格式来输出。
4、Layout:
  这个用于控制日志输出显示格式。
5、Object Render
  用于按照用户自定义标准来输出日志。

三、Log4net参数:针对Layout设置日志输出的格式
1.%m(message):输出的日志消息
2.%n(new line):换行
3.%d(datetime):输出当前语句运行的时刻
4.%r(runtime):输出程序从运行到当前语句时消耗的毫秒数
5.%t(thread id):当前语句所在线程的ID
6.%p(priority):日志的当前优先级
7.%c(Class):当前日志对象的名称
8.%f(file):输出语句所在的文件名
9.%l(line):输出语句所在的行号
10.%数字:表示该项的最小宽度,如果不够,则用空格填充。

例如:"[时间]:%d%n[级别]:%p%n[内容]:%m%n%n"
[时间]:2016-10-28 10:21:38,634
[级别]:INFO
[内容]:>>>>>>>>>>>

四、Log4net日志分类

Log4net 分为如下几个级别:
FATAL 毁灭级别
ERROR 错误级别
WARA  警告级别
INFO  消息级别
DEBUG 调试级别
这几种日志级别高低:FATAL>ERROR>WARA>INFO>DEBUG。
只有日志输出级别大于或等于配置的级别才能输出日志信息。
比如我的日志配置级别为INFO,那么只有log.info(),log.warm(),log.Error(),log.Fatal()才能输出日志信息,Debug方式就不能输出。
Log4net中还有两种特殊的配置级别:ALL -允许所有的日志级别输出,OFF - 拒绝所有的日志级别输出。

五、在配置中启用和关闭日志
在config文件中可以很方便地关闭和启用日志,就是在<root>进行配置,如下就是一个例子:

 1 <root>
 2       <!--设置日志输出级别-->
 3       <level value="INFO"></level>
 4       <!--以文件的形式记录日志-->
 5       <appender-ref ref="RollingLogFileAppender"></appender-ref>
 6       <!--以控制台的形式记录日志-->
 7       <appender-ref ref="ConsoleAppender"></appender-ref>
 8       <!--以数据库的形式记录日志-->
 9       <appender-ref ref="AdoNetAppender"></appender-ref>
10 </root>

在上面的例子中可以看出,如果想增加日志输出目的地,增加<appender-ref>节点就是了,注意后面的ref是在config中配置的appender name,如果想要取消,删除或者注释掉这行就可以了。

六、log4net使用

1、引用log4net.dll文件

使用log4net必须引入log4net.dll文件,两种下载log4net.dll的方式:

(1)、在Nuget中下载log4net

点击"安装"进行安装

(2)、在官网下载

官网网址:http://logging.apache.org/log4net/

下载DLL文件,解压之后根据.NET FRAMEWORK的版本,选择对应的DLL文件,文件路径:C:\Users\Lenovo\Desktop\log4net-2.0.7-bin-newkey\log4net-2.0.7\bin\net\4.5\release。

引用->添加引用,将下载的log4net.dll文件添加进来。

2、在config文件中的配置

首先要添加config文件,在类库项目、命令行程序及WinForm中添加的是app.config,在WebForm中添加的是web.config。或者新添加一个"应用程序配置文件",将配置信息添加在新的配置文件中,在本示例中,将配置信息添加在新的应用程序配置文件中。新的配置文件命名为:log4net.config。

注意:要将log4net.config的属性“复制到输出目录”设置为“始终复制”。在log4net上右键选择文件属性,修改属性

要使用log4net,首先要在config文件的<configSections>节点中增加配置(如果没有这个节点请手动增加),如下:

1 <configSections>
2     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
3 </configSections>

除此之外,还要在顶级节点<configuration>下增加<log4net>子节点。在<log4net>节点下就可以增加<appender>子节点,每个<appender>子节点代表一种记录日志的方式。

在使用日志的类的命名空间前加上XmlConfiguratorAttribute标记

不加这个标记的话则log无法生效,如果类较多则比较麻烦,此时可以把这个配置放在AssemblyInfo.cs中,针对整个程序集生效。

(3)、示例程序

配置文件:

  1 <?xml version="1.0" encoding="utf-8" ?>
  2 <configuration>
  3
  4   <configSections>
  5     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  6   </configSections>
  7   <log4net>
  8     <!--把日志信息输出到文件里-->
  9     <!-- 日志文件部分log输出格式的设定 -->
 10     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
 11       <!--日志文件名开头-->
 12       <file value="Logs/Log_"/>
 13       <!--多线程时采用最小锁定-->
 14       <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
 15       <!--是否追加到文件,默认为true,通常无需设置-->
 16       <appendToFile value="true"/>
 17       <!--设置动态文件名-->
 18       <StaticLogFileName value="false"/>
 19       <!--变换的形式为日期,这种情况下每天只有一个日志-->
 20       <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
 21       <!--<rollingStyle value="Date"/>-->
 22       <!--变换的形式为日志大小-->
 23       <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
 24       <RollingStyle value="Composite"/>
 25       <!--日期的格式 (yyyyMMdd),每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
 26       <datePattern value="yyyy_MM_dd&quot;.log&quot;"/>
 27       <!--每天记录的日志文件个数,与maximumFileSize配合使用-->
 28       <MaxSizeRollBackups value="100"/>
 29       <!--每个日志文件的最大大小;可用的单位:KB|MB|GB;不要使用小数,否则会一直写入当前日志-->
 30       <maximumFileSize value="8MB"/>
 31       <!--日志格式-->
 32       <layout type="log4net.Layout.PatternLayout">
 33         <header value="------------------------------------------------------------"/>
 34         <ConversionPattern value="★★★★★★%newline%date [%thread] %-5level %logger [%ndc] - %newline%message%newline" />
 35       </layout>
 36     </appender>
 37     <!--记录日志到数据库-->
 38     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
 39       <!--缓存:当日志达到一定的数量,在往数据库里面保存,减少数据库压力-->
 40       <bufferSize value="1"/>
 41       <!--引用的动态链接库-->
 42       <connectionType value="System.Data.SqlClient.SqlConnection,System.Data,Version=1.0.3300.0,Culture=neutral,PublicKeyToKen=b77a5c561934e089"/>
 43       <!--数据库连接字符串-->
 44       <connectionString value="Data Source=JIANGXIAOLIANG;Initial Catalog=NightCat;Integrated Security=True"/>
 45       <!--插入数据库表的SQL语句-->
 46       <commandText value="INSERT INTO [dbo].[Sys_Log]([Date],[Thread] ,[Leval],[Logger],[Message],[Exception]) VALUES (@Date ,@Thread,@Leval ,@Logger ,@Message,@Exception)"/>
 47       <!--参数-->
 48       <parameter>
 49         <parameterName value="@Date"/>
 50         <dbType value="DateTime"/>
 51         <layout type="log4net.Layout.RawTimeStampLayout"/>
 52       </parameter>
 53       <parameter>
 54         <parameterName value="@Thread"/>
 55         <dbType value="String"/>
 56         <size value="255"></size>
 57         <layout type="log4net.Layout.PatternLayout">
 58           <conversionPattern value="%thread"/>
 59         </layout>
 60       </parameter>
 61       <parameter>
 62         <parameterName value="@Leval"/>
 63         <dbType value="String"/>
 64         <size value="255"></size>
 65         <layout type="log4net.Layout.PatternLayout">
 66           <conversionPattern value="%leval"/>
 67         </layout>
 68       </parameter>
 69       <parameter>
 70         <parameterName value="@Logger"/>
 71         <dbType value="String"/>
 72         <size value="255"></size>
 73         <layout type="log4net.Layout.PatternLayout">
 74           <conversionPattern value="%thread"/>
 75         </layout>
 76       </parameter>
 77       <parameter>
 78         <parameterName value="@Message"/>
 79         <dbType value="String"/>
 80         <size value="255"></size>
 81         <layout type="log4net.Layout.PatternLayout">
 82           <conversionPattern value="%thread"/>
 83         </layout>
 84       </parameter>
 85       <parameter>
 86         <parameterName value="@Exception"/>
 87         <dbType value="String"/>
 88         <size value="255"></size>
 89         <layout type="log4net.Layout.ExceptionLayout"/>
 90       </parameter>
 91     </appender>
 92     <!--把日志信息输出到控制台-->
 93     <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
 94       <!--日志在日志文件中的布局格式-->
 95       <layout type="log4net.Layout.PatternLayout">
 96         <header value="------------------------------------------------------------"/>
 97         <ConversionPattern value="[时间]:%d%n[级别]:%p%n[内容]:%m%n%n" />
 98       </layout>
 99     </appender>
100     <root>
101       <!--设置日志输出级别-->
102       <level value="INFO"></level>
103       <!--以文件的形式记录日志-->
104       <appender-ref ref="RollingLogFileAppender"></appender-ref>
105       <!--以控制台的形式记录日志-->
106       <appender-ref ref="ConsoleAppender"></appender-ref>
107       <!--以数据库的形式记录日志-->
108       <appender-ref ref="AdoNetAppender"></appender-ref>
109     </root>
110   </log4net>
111   <startup>
112     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
113   </startup>
114 </configuration>

在程序中使用log4net记录日志:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using log4net;
 7
 8 namespace Log4netDemo
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             //创建文件对象
15             ILog log = LogManager.GetLogger("log4netDemo");
16             //开启配置
17             log4net.Config.XmlConfigurator.Configure();
18             log.Debug("我是Debug");
19             log.Info("我是Info");
20             log.Error("我是Error");
21
22             Console.ReadKey();
23         }
24     }
25 }

输出结果(以控制台为例):

在config文件中设置的日志输出级别是INFO,而Debug的级别小于INFO,所以只输出Info和Error。

在WebForm中也可以使用Log4net,如果是web项目,需要在global.asax的Application_Start方法中配置web.config的引用,log4net.Config.XmlConfigurator.Configure();

时间: 2024-11-04 04:40:19

记录日志框架:log4net使用的相关文章

.NET日志记录框架Log4Net使用总结

做项目,记录日志是免不了的.在开发过程中还可以调试,但是在项目发布之后,不可能长期这么做,日志则能够在最快的时间内发现问题.最近,在好几个项目中使用了Log4net,感觉确实给我省了不少力,总结一下使用吧,同时也留作以后备用. 1 使用Nuget安装Log4Net: Install-Package log4net 2 创建LogHelper.cs using System; namespace UCsoft.Web.Common { /// <summary> /// Log4Net日志封装类

ASP.NET MVC 使用 Log4net 记录日志

Log4net 介绍 Log4net 是 Apache 下一个开放源码的项目,它是Log4j 的一个克隆版.我们可以控制日志信息的输出目的地.Log4net中定义了多种日志信息输出模式.它可以根据需要将日志输出到控制台,文本文件,windows 日志事件查看器中,包括数据库,邮件等等位置,以便我们快速跟踪程序bug. Log4net 提供 7个日志等级,从高到底分别为:OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL Lo

Log4Net使用技巧

Log4Net使用技巧 1.Log4Net简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.log4net是Apache软件基金会Apache Logging Services工程的一部分.Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务. 今天,我带领大家在ASP.NET上使用Log4Net记录日志 2.Log4Net 下载 下载地址: http://down

Log4Net使用指南

Log4记录日志使用说明   |  Log4net学习笔记 <1> Appender 附加,增加配置附加器有很多种,主要用到的几种: log4net.Appender.AdoNetAppender <记录到数据库配置access,sqlserver或者其他的数据库> log4net.Appender.FileAppender <记录到记录日志到单个文件> log4net.Appender.EventLogAppender <记录到记录日志到操作系统的事件>

log4net学习手册一 Apache log4net的特点?

一下内容是Apache log4net官网技术文档通过google翻译而来 http://logging.apache.org/log4net/release/features.html 概述 log4net的是一个工具,帮助程序员输出日志报表的各种输出目标.如遇问题,一个应用程序,它有助于启用日志记录,这样的问题可以被找到.用log4net的,可以启用日志记录在运行时无需修改应用程序的二进制文件. log4net的包被设计成使得日志语句可以留在运送代码,而不会产生高的性能成本.由此可见记录(或

ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1-1 手把手引进门 1-2 进阶 1-3 杂项 (相关理论知识) 第一篇含两个步骤. 1-1-1 ASP.NET Core & Entity Framework Core 后端(内核)含两篇 ( 第一篇链接    

编写日志的正确姿势

一般来说,对于何时写日志并没有明确的限制和约束,只要你觉得记录的日志是有价值的,对跟踪bug是有帮助的,你就可以去添加日志.当然一些敏感信息除外,比如你正在开发一套支付系统,不要把客户的卡号和密码等信息记录在日志中,因为日志并不会被刻意保护,有可能被其他的用户群体收集到. 另外不要担心大量的日志会对服务器造成压力,一般来说在产品环境都会采用消息队列配合搜索引擎的方式存储日志,通过定义准确的日志级别也会减少生产环境的日志数量. 一.如何记录日志 以log4net为例,在想要添加日志的任何地方使用下

mvc中日志的原理和使用步骤

日志原理 就是观察者模式(订阅发布模式) , 具体和委托很像 使用步骤  在 log4net框架下 1.在Common中定义LogHelper入口类 1.定义LogHelper类 namespace LTeasyOA.Common { public class LogHelper { public static Queue<string> ExceptionStringQueue = new Queue<string>();//日志消息队列 public static List&l

【SSH进阶之路】Hiberante3搭建开发环境+简单实例(二)

Hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理,到最后可能什么也学不会,从实践入手,熟能生巧,思想和原理自然而然领悟. 上篇博文:[SSH进阶之路]Hibernate基本原理,我们介绍了Hibernate的基本概念.Hibernate的核心以及Hibernate的执行原理,可以很好帮助我们认识Hibernate,再看这篇博客之前,请先回顾上