1、背景

log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。它是.Net下一个非常优秀的开源日志记录组件,可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要通过项目实践来介绍如何在VS2012中使用log4net快速创建系统日志,以及如何扩展以输出自定义字段等内容。这一部分网上资料其实很多,我这边只是对于我学到的知识的一个整理,要是有不全的或者有误的,还望大家补充。

2、特征
  • 可输出日志到多种目标
  • 层级日志体系
  • 可使用XML配置
  • 可动态配置
  • 记录上下文信息
  • 被检验过的体系
  • 模块化和可扩展化设计
  • 灵活、高性能

3、主要组成

Appenders(输出源)、Filters(过滤器)、Layouts(布局)、Loggers(日志类别)和 Object Renders(渲染器)。



a、Appenders(输出源):

用来定义日志的输出方式,其中包括:

·AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。

·AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。

·AspNetTraceAppender  能用asp.net中Trace的方式查看记录的日志。

·BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。

·ConsoleAppender 将日志输出到应用程序控制台。

·EventLogAppender 将日志写到Windows Event Log。

·FileAppender 将日志输出到文件。

·ForwardingAppender 发送日志事件到子Appenders。

·LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)。

·MemoryAppender 将日志存到内存缓冲区。

·NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

·OutputDebugStringAppender 将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。

·RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service。

·RemotingAppender 通过.NET Remoting将日志写到远程接收端。

·RollingFileAppender 将日志以回滚文件的形式写到文件中。

·SmtpAppender 将日志写到邮件中。

·SmtpPickupDirAppender 将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。

·TelnetAppender 客户端通过Telnet来接受日志事件。

·TraceAppender 将日志写到.NET trace 系统。

·UdpAppender 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。

b、Filter(过滤器):

用来过滤输出源输出的内容,其中包括:

·DenyAllFilter 阻止所有的日志事件被记录

·LevelMatchFilter 只有指定等级的日志事件才被记录

·LevelRangeFilter 日志等级在指定范围内的事件才被记录

·LoggerMatchFilter Logger名称匹配,才记录

·PropertyFilter 消息匹配指定的属性值时才被记录

·StringMathFilter 消息匹配指定的字符串才被记录

c、Layout(布局):

用来控制输出源输出内容的输出格式(一个输出源只带有一个布局)

最常用的Layout应该是用户自定义格式的PatternLayout,其次是SimpleLayout和ExceptionLayout。然后还有4个Layout,其中有两个是输出Xml的Layout,但是中文会有问题。

ExceptionLayout需要给Logger的方法传入Exception对象作为参数才起作用,否则就什么也不输出。输出的时候会包含Message和Trace

d、
Loggers(日志类别):

直接和应用程序交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式。

Logger提供了多种方式来记录一个日志消息,也可以有多个Logger同时存在。每个实例化的Logger对象对被log4net作为命名实体(Named Entity)来维护。log4net使用继承体系,也就是说假如存在两个Logger,名字分别为a.b.c和a.b。那么a.b就是a.b.c的祖先。每个Logger都继承了它祖先的属性。

级别

说明

允许的方法

优先级别

OFF

——

——

Highest

FATAL

毁灭级别

void Fatal(...);

——

ERROR

错误级别

void Error(...);

——

WARN

警告级别

void Warn(...);

——

INFO

消息级别

void Info(...);

——

DEBUG

调试级别

void Debug(...);

——

ALL

——

——

Lowest

注:其中OFF表示拒绝所有日志记录,ALL表示所有日志都可以记录。

e、Object Renders(渲染器):

按照用户定义的标准输出日志消息。Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。

log4net应用实践(一)的更多相关文章

  1. LOG4NET开源日志dll引用流程,在net3.5中已经实践ok

    一,在app.config中配置 <?xml version="1.0"?><configuration> <configSections> & ...

  2. 如何将Log4Net 日志保存到mongodb数据库之实践

    log4net的大名早有耳闻,一直没真正用过,这次开发APP项目准备在服务端使用log4net. 日志的数据量较大,频繁的写数据库容易影响系统整体性能,所以独立将日志写到mongodb数据库是不错的选 ...

  3. .Net Core 实践 - 使用log4net记录日志(3)— log4net向ElasticSearch写日志

    demo地址:https://github.com/PuzzledAlien/log4net_demo/tree/master/DotNetCoreConsole_V3 Windows 10 安装部署 ...

  4. .Net Core 实践 - 使用log4net记录日志(2)

    实现目标:将log4net的相关操作封装成一个 .Net Standard类库 demo地址:https://github.com/PuzzledAlien/log4net_demo/tree/mas ...

  5. .Net Core 实践 - 使用log4net记录日志(1)

    demo地址:https://github.com/PuzzledAlien/log4net_demo 准备 log4net 最新版本是2.0.8 VS2017 .Net Core 2.2 测试电脑配 ...

  6. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  7. Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统

    最近正在学习Vue2.0相关知识,正好近期饿了么桌面端组件Element-UI发布,便动手做了一款简易个人记账系统,以达到实践及巩固目的. 1.开发环境 Win10 + VS2015 + Sqlser ...

  8. NanoProfiler - 适合生产环境的性能监控类库 之 实践ELK篇

    上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇 上次介绍了NanoProfiler的大数据分析理念,一晃已经时隔一年多了,真是罪过! 有朋友问到何时开源的问题 ...

  9. Hangfire项目实践

    Hangfire项目实践分享 Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget ...

随机推荐

  1. VUE学习笔记之vue cli 构建项目

    一.环境搭建: 1.安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd), ...

  2. solr6.6教程-从mysql数据库中导入数据(三)

    整理多半天的solr6.6,终于算是把solr6.6中配置数据库弄出来了,网上的文章千篇一律,各说个的,没有一篇统一覆盖solr6.6版本配置的 帖子,本章节我会把配置的一些注意事项一一列举,由于时间 ...

  3. ListIterator的使用

    package cn.lonecloud.Iterator; import java.util.ArrayList; import java.util.ListIterator; public cla ...

  4. Mysql 远程登录及常用命令

    第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...

  5. 1.2 decimal模块

    >>> 0.1 + 0.1 +0.1 == 0.3 False >>> >>> print(0.1 + 0.1 + 0.1) 0.30000000 ...

  6. Java.lang.Comparable接口和Java.util.Comparator接口的区别

    Java的Comparator和Comparable当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 1.Com ...

  7. hihoCoder 1036 Trie图 AC自动机

    题意:给定n个模式串和一个文本串,判断文本中是否存在模式串. 思路:套模板即可. AC代码 #include <cstdio> #include <cmath> #includ ...

  8. HDU1560 DNA sequence IDA* + 强力剪枝 [kuangbin带你飞]专题二

    题意:给定一些DNA序列,求一个最短序列能够包含所有序列. 思路:记录第i个序列已经被匹配的长度p[i],以及第i序列的原始长度len[i].则有两个剪枝: 剪枝1:直接取最长待匹配长度.1900ms ...

  9. 基于Jenkins+Git+Gradle的Android持续集成

    本文参考了: http://my.oschina.net/uboluo/blog/157483 http://java.dzone.com/articles/automating-continuous ...

  10. STM32 下的库函数和寄存器操作比较

    以 led闪烁中的flashLed函数例子: 库函数操作简单,但是效率不如寄存器操作的高: 寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高 /**下面是通过直接操作库函数的方式实现IO控制 ...