日志记录组件[Log4net]详细介绍
转载:http://www.cnblogs.com/liwei6797/archive/2007/04/27/729679.html
因为工作中有要用到Log记录,找到一篇不错的文章,就转了过来。
一 Log4net简介
Log4net是基于.net开发的一款非常著名的记录日志开源组件。他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4j。Log4net记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。
Log4net可以从http://logging.apache.org/log4net/downloads.html网站下载最新版本。
二 Log4net核心组成
Log4net主要由五个部分组成,分别为Logger,Appenders, Filters, Layouts 和Object Renders。
一) Logger(日志)
1. 记录日志的分类:
Log4net能够以多种方式输出日志。支持的日志输出常用的主要媒介有数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite,控制台,文件,事件日志(可以用事件查看器查看)和邮件等多种方式。
2. 日志的级别
Log4net支持多种级别的日志。优先级从高到低依次排列如下:
FATAL > ERROR > WARN > INFO > DEBUG
此外还有ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求)这两种特殊的级别。
二) Appenders
Appenders决定日志输出的方式。
Appenders必须实现log4net.Appenders.IAppender接口。
Log4net目前支持的输出方式包括:
1 AdoNetAppender
将日志记录到数据库中。可以采用SQL和存储过程两种方式。
2 AnsiColorTerminalAppender
在ANSI 窗口终端写下高亮度的日志事件。
3 AspNetTraceAppender
能用asp.net中Trace的方式查看记录的日志。
4 BufferingForwardingAppender
在输出到子Appenders之前先缓存日志事件。
5 ConsoleAppender
将日志输出到控制台。
6 EventLogAppender
将日志写到Windows Event Log.
7 FileAppender
将日志写到文件中。
8 LocalSyslogAppender
将日志写到local syslog service (仅用于UNIX环境下).
9 MemoryAppender
将日志存到内存缓冲区。
10 NetSendAppender
将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
11 RemoteSyslogAppender
通过UDP网络协议将日志写到Remote syslog service。
12 RemotingAppender
通过.NET Remoting将日志写到远程接收端。
13 RollingFileAppender
将日志以回滚文件的形式写到文件中。
14 SmtpAppender
将日志写到邮件中。
15 TraceAppender
将日志写到.NET trace 系统。
16 UdpAppender
将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。
三) Filters
Appender对象将日志以缺省的方式传到输出流,然后Filter可以按照不同的标准控制日志的输出。Filter可以再配置文件中配置。最简单的形式是在appender中写明一个Threshold.这样只有级别大于或等于此Threshold的日志才被记录。
Filters必须实现log4net.Filters.IFilter接口。
四) Layouts
Layouts控制日志显示的格式样式。日志的显示格式如下:
"%timestamp [%thread] %-5level %logger - %message%newline"
Timestamp: 表示程序已经开始执行的时间。 单位[毫秒]。
Thread:执行当前代码的线程。
Level:日志的级别。
Logger:日志相关请求的名称。
Message: 日志消息。
Layouts还可以控制日志的输出样式,比如以普通形式或以xml等形式输出。
五) Object Renderers
这是很重要的一项,log4net将按照用户定义的标准输出日志消息。
Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。
三 如何在项目中使用log4net
下面有个基于控制台的demo,举例描述了log4net怎么用于输出日志。
本例中,日志将会记录到文件,控制台,事件日至和Access数据库中。
一)主要代码:
1. 配置文件app.config
1<?xml version="1.0" encoding="utf-8" ?>
2<configuration>
3 <!-- Register a section handler for the log4net section -->
4 <configSections>
5 <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
6 </configSections>
7 <appSettings>
8 <!-- To enable internal log4net logging specify the following appSettings key -->
9 <!-- <add key="log4net.Internal.Debug" value="true"/> --></appSettings>
10 <!-- This section contains the log4net configuration settings -->
11 <log4net>
12 <!--定义输出到文件中-->
13 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
14 <!--定义文件存放位置-->
15 <file value="D:\log-file1.txt" />
16 <!-- Example using environment variables in params -->
17 <!-- <file value="${TMP}\log-file.txt" /> -->
18 <!--<sppendToFile value="true" />-->
19 <!-- An alternate output encoding can be specified -->
20 <!-- <encoding value="unicodeFFFE" /> -->
21 <layout type="log4net.Layout.PatternLayout">
22 <!--每条日志末尾的文字说明-->
23 <footer value="[Footer]--Test By Ring1981 " />
24 <!--输出格式-->
25 <conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %message%newline" />
26 </layout>
27 </appender>
28 <!--定义输出到控制台命令行中-->
29 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
30 <layout type="log4net.Layout.PatternLayout">
31 <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
32 </layout>
33 </appender>
34 <!--定义输出到windows事件中-->
35 <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
36 <layout type="log4net.Layout.PatternLayout">
37 <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
38 </layout>
39 </appender>
40 <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为D盘的access.mdb-->
41 <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
42 <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\access.mdb" />
43 <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
44 <!--定义各个参数-->
45 <parameter>
46 <parameterName value="@log_date" />
47 <dbType value="String" />
48 <size value="255" />
49 <layout type="log4net.Layout.PatternLayout">
50 <conversionPattern value="%date" />
51 </layout>
52 </parameter>
53 <parameter>
54 <parameterName value="@thread" />
55 <dbType value="String" />
56 <size value="255" />
57 <layout type="log4net.Layout.PatternLayout">
58 <conversionPattern value="%thread" />
59 </layout>
60 </parameter>
61 <parameter>
62 <parameterName value="@log_level" />
63 <dbType value="String" />
64 <size value="50" />
65 <layout type="log4net.Layout.PatternLayout">
66 <conversionPattern value="%level" />
67 </layout>
68 </parameter>
69 <parameter>
70 <parameterName value="@logger" />
71 <dbType value="String" />
72 <size value="255" />
73 <layout type="log4net.Layout.PatternLayout">
74 <conversionPattern value="%logger" />
75 </layout>
76 </parameter>
77 <parameter>
78 <parameterName value="@message" />
79 <dbType value="String" />
80 <size value="1024" />
81 <layout type="log4net.Layout.PatternLayout">
82 <conversionPattern value="%message" />
83 </layout>
84 </parameter>
85 </appender>
86 <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
87 <root>
88 <appender-ref ref="LogFileAppender" />
89 <appender-ref ref="ConsoleAppender" />
90 <appender-ref ref="EventLogAppender" />
91 <appender-ref ref="AdoNetAppender_Access" />
92 </root>
93 </log4net>
94</configuration>
2. LoggingExample.cs
1// Configure log4net using the .config file
2[assembly: log4net.Config.XmlConfigurator(Watch=true)]
3// This will cause log4net to look for a configuration file
4// called ConsoleApp.exe.config in the application base
5// directory (i.e. the directory containing ConsoleApp.exe)
6
7namespace ConsoleApp
8{
9 using System;
10
11 /**//// <summary>
12 /// Example of how to simply configure and use log4net
13 /// </summary>
14 public class LoggingExample
15 {
16 private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
17
18 public static void Main(string[] args)
19 {
20 log.Error("Error Acc");
21 log.Fatal("Fatle Acc");
22 System.Console.ReadLine();
23
24 }
25
26 }
27}
28
运行程序,日志就会以xml中定义的四种媒介形式输出。
源代码可以从http://files.cnblogs.com/Ring1981/Log4net%20Test.rar下载。
日志记录组件[Log4net]详细介绍的更多相关文章
- log4net--不可多得的开源日志记录组件
log4net--不可多得的开源日志记录组件 1 前奏 一直在用log4net日志工具,却没时间写个日志给大家分享一下这个工具,趁最近比较空些,好好分享一下这个工具. 2 说明 Log4net介绍就不 ...
- .NET日志记录之——log4net划重点篇
.NET日志记录之--log4net划重点篇 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不 ...
- 【干货】.NET开发通用组件发布(四) 日志记录组件
组件介绍和合作开发 http://www.cnblogs.com/MrHuo/p/MrHuoControls.html 日志记录组件功能介绍 通过基类Logger,实现了文本记录日志和数据库记录日志两 ...
- <react> 组件的详细介绍:
<react> 组件的详细介绍: 思维导图: 代码介绍: TodoList:(组件) import React, { Component } from 'react' import Sty ...
- C#Log4net日志记录组件的使用
一.Log4Net介绍 Log4net是基于.NET开发的一款非常著名的记录日志开源组件.它通过一套XML配置的日志引擎,将日志分不同的等级,分别是:FATAL . ERROR. WARN. INFO ...
- Elmah 日志记录组件
http://www.cnblogs.com/jys509/p/4571298.html 简介 ELMAH(Error Logging Modules and Handlers)错误日志记录模块和处理 ...
- 以HTML为表现的日志记录组件
日志搬家:http://www.loogn.net/blog/Article.aspx?id=21 关于日志记录,如果你不想随用随写,又不想用log4net的话,也许你可以了解一下这个! 我也是个很懒 ...
- 日志记录类库log4net的使用总结
log4net是一个开源的日志记录类库,经过配置后可以自动抓取程序中的错误.异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键.写入数据库等.这里写个ASP.NET MVC ...
- linux系统各种日志存储路径和详细介绍
Linux常见的日志文件详述如下1./var/log/boot.log(自检过程)2./var/log/cron (crontab守护进程crond所派生的子进程的动作)3./var/log/mail ...
随机推荐
- oracle热点表online rename
对于在线的繁忙业务表的任何操作都可能带来意想不到的风险.一张业务表,对partition key进行升位,其步骤是: rename原表 新建临时表 交换分区到临时表 升位临时表的字段的长度 交换临时表 ...
- (转载)js----对象直接量
(转载)http://blog.csdn.net/greymouseyu/article/details/4015676 对象直接量提供了另一种创建新对象的方式.对象直接量允许将对象描述文字嵌入到Ja ...
- 将access数据转换成oracle数据
1.打开access数据文件,选择需转换的表/导出/ODBC数据库 2.输入导出的表名 3.选择数据源,点击新建 4.选择数据源驱动程序 5.保存DSN文件 6.下一步,输入oracle的SERVIC ...
- C#读取json数据介绍
//using System.Web.Script.Serialization; JavaScriptSerializer serializer = new JavaScriptSerializer( ...
- JavaScript---网络编程(11)--DHTML技术演示(4)-单选框/下拉菜单/添加文件
本节讲述单选框/下拉菜单/添加文件,综合css,html和JavaScript. 单选框: 实现的功能是:(类似平时的性格测试) 先隐藏一部分页面,然后通过点击单选框来显示. 再通过选项的选择-(每个 ...
- [CODEVS3641]上帝选人
题目描述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的智商和情商,数字大就代表其相应智商或情商高.现在你面前有N个人,这N个人的智商和情商均已知,请你选择出尽量多 ...
- C语言工具的简单辨析
- STM32 定时器用于外部脉冲计数
STM32 定时器用于外部脉冲计数 第一步,设置GPIO GPIO_InitTypeDef GPIO_InitStructure; /* PA0,PA12-> 左右脉冲输入 */GPIO_Ini ...
- ORA-01502: 索引或这类索引的分区处于不可用状态
ORA-01502: 索引或这类索引的分区处于不可用状态 原因: 出现这个问题,可能有人move过表,或者disable 过索引.1. alter table xxxxxx move tablespa ...
- MongoDB 复制集(二) 选举 自动故障切换
一 复制集的高可用性简介 复制集通过故障自动切换来实现高可用性,当主节点出现故障的时候,从节点可以通过选举成为主节点,而这个过程在大多数当情况下是自动进行的,不需要手动干预.在某些情况 ...