快速入门系列--Log4net日志组件
时间:2022-04-24
本文章向大家介绍快速入门系列--Log4net日志组件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Log4net是阿帕奇基金会的非常流行的开源日志组件,是log4j的.NET移植版本,至今已经有11年的历史,使用方便并且非常稳定,此外很重要的一点是其和很多开源组件能很好的组合在一起工作,例如NHibernate等。对于以本地日志为主的中小型的项目,Log4net已经足够使用,当然涉及跨平台的大型分布式系统可以选择Elmah等其他日志组件。
在这里,主要介绍log4net的一些关键知识点,详细内容可见以下链接:
- 官方配置文档:http://logging.apache.org/log4net/release/config-examples.html
- 老博主摩诘在10年前就做了很仔细的解释:http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html
- 博主每日一bo非常仔细的文档:http://www.cnblogs.com/caokai520/p/4387491.html
首先是log4net的四个对象:
- Logger记录器:用于产生日志,包括Fatal、ERROR、WARN、INFO、DEBUG,可以通过设置logger的记录级别进行设置,例如level=INFO,那么除了DEBUG级别的信息,其他FATAL、ERROR、WARN、INFO等级别都将被记录。
- Reposity库:维护日志对象的组织结构,主要用于对框架的扩展,一般使用不用关注。
- Appender附着器:用于设置Log的输出模式,如文件、数据库、邮件等。
- Layout布局:设置日志信息的格式。
其中Appender的选择很多,但最常见的最有实际意义的分别是:
log4net.Appender.RollingFileAppender:通过配置,可以达到日志文件每天以日期新建一个,方便查看,还可以设置日志文件大小,防止侵占硬盘。
log4net.Appender.SmtpAppender:用于FATAL、ERROR等高危级别的日志,直接发邮件给项目责任人,非常的方便有效。
log4net.Appender.AdoNetAppender:和SQL SERVER很紧密的结合,便于将重要日志信息记入数据库,便于查找和备份。
最后,想说的是log4net组件可以通过配置LockingModel设置并发时日志文件锁的模式,使其应用场景得到很大的扩充。
附上一个简单日志配置例子作为参考,具体设置时有什么问题欢迎一起探讨哈,:) :
1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <configSections>
4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
5 </configSections>
6 <log4net>
7 <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
8 <layout type="log4net.Layout.PatternLayout">
9 <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline"/>
10 </layout>
11 </appender>
12 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
13 <bufferSize value="100"/>
14 <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
15 <connectionString value="data source=(localdb)v11.0;initial catalog=NormalTest;integrated security=false;persist security info=True;User ID=[user];Password=[pwd]"/>
16 <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/>
17 <parameter>
18 <parameterName value="@log_date"/>
19 <dbType value="DateTime"/>
20 <layout type="log4net.Layout.RawTimeStampLayout"/>
21 </parameter>
22 <parameter>
23 <parameterName value="@thread"/>
24 <dbType value="String"/>
25 <size value="255"/>
26 <layout type="log4net.Layout.PatternLayout">
27 <conversionPattern value="%thread"/>
28 </layout>
29 </parameter>
30 <parameter>
31 <parameterName value="@log_level"/>
32 <dbType value="String"/>
33 <size value="50"/>
34 <layout type="log4net.Layout.PatternLayout">
35 <conversionPattern value="%level"/>
36 </layout>
37 </parameter>
38 <parameter>
39 <parameterName value="@logger"/>
40 <dbType value="String"/>
41 <size value="255"/>
42 <layout type="log4net.Layout.PatternLayout">
43 <conversionPattern value="%logger"/>
44 </layout>
45 </parameter>
46 <parameter>
47 <parameterName value="@message"/>
48 <dbType value="String"/>
49 <size value="4000"/>
50 <layout type="log4net.Layout.PatternLayout">
51 <conversionPattern value="%message"/>
52 </layout>
53 </parameter>
54 <parameter>
55 <parameterName value="@exception"/>
56 <dbType value="String"/>
57 <size value="2000"/>
58 <layout type="log4net.Layout.ExceptionLayout"/>
59 </parameter>
60 </appender>
61 <appender name="Log4Net_INFO" type="log4net.Appender.RollingFileAppender">
62 <file value="C:/log4net/LuceneDemo/info/"/>
63 <appendToFile value="true"/>
64 <RollingStyle value="Date"/>
65 <DatePattern value="yyyyMMdd".log""/>
66 <StaticLogFileName value="false"/>
67 <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
68 <layout type="log4net.Layout.PatternLayout">
69 <Header value="[Header]"/>
70 <Footer value="[Footer]"/>
71 <ConversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 信息类:%logger property:[%property{NDC}] - 信息描述:%message%newline"/>
72 </layout>
73 </appender>
74 <root>
75 <level value="INFO"/>
76 <appender-ref ref="Log4Net_INFO"/>
77 <appender-ref ref="AdoNetAppender"/>
78 </root>
79 </log4net>
80 </configuration>
- 修改终端服务器的最大连接数
- 跨平台移动开发UI语言 -XAML
- S-shortcodes:WordPress短代码形式美化框插件下载
- 服务器同时存在1.1和2.0程序注意事项
- Flash/Flex学习笔记(44):万有引力与粒子系统
- 代码重写WordPress网页标题为“原网页标题|网站名”的形式
- 未来10年21个核心工作岗位
- Asp.net 2.0 WebPart使用经验点滴
- 使用LinqToExcel读取Excel
- 时代的需要:越来越多的Java工程师开始转向hadoop?
- 如何结合IbatisNet的LIST遍历实现模糊查询
- Flash/Flex学习笔记(41):碰撞检测
- [.NET网格计算框架] Alchemi
- 修改WordPress登陆文件名wp-login.php,防密码被暴力破解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- jsp作业——简单的试卷和自动打分
- ESP8266烧入nodemcu简易教程
- 搭建简易的物联网服务端和客户端-STM32(一)
- 搭建简易的物联网服务端和客户端-Nodejs_net(二)
- 搭建简易的物联网服务端和客户端-Nodejs_mysql(三)
- 搭建简易的物联网服务端和客户端-net+mysql(四)
- 搭建简易的物联网服务端和客户端-Nodejs_express服务(六)
- TF中Placement的最后一道防线——Placer
- 搭建简易的物联网服务端和客户端-ECharts数据显示(七)
- 搭建简易的物联网服务端和客户端-整合(八)
- 搭建简易的物联网服务端和客户端-Maibu显示(九)
- 搭建简易的物联网服务端和客户端-DCloud手机端(十)
- 整理了一份 Docker系统知识,从安装到熟练操作看这篇就够
- 搭建简易的物联网服务端和客户端-第一次增补(十一)
- 搭建简易的物联网服务端和客户端-第二次增补(十二)