log4j配置文件详解_第一节:框架前期准备篇之Log4Net日志详解

一. Log4Net简介

Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库、txt文件、内存缓冲区、邮件、控制台、ANSI终端、远程接收端等等,我们这里主要介绍最常用的两种:txt文件和数据库。

(PS:其它的存储介质详见 http://logging.apache.org/log4net/release/config-examples.html)

Log4net将日志分为五个级别,分别是: FATAL(致命错误) > ERROR(一般错误) > WARN(警告) > INFO(一般信息) > DEBUG(调试信息),每个级别都对应着一组重载方法进行调用。

官网地址:http://logging.apache.org/log4net/index.html

Nuget地址:https://www.nuget.org/packages/log4net/

Nuget安装:Install-Package log4net

最新版本:2.0.8 (2018-08-09)

本节主要围绕两个主要的存储介质:【txt文件】和【SQLServer数据库】展开,涵盖的知识点有:

①. 基本的使用步骤。

②. 初始化关联配置文件的几种形式。

③. 代码调用详解。

④. 配置文件详解。

⑤. 简单的封装和在MVC框架中的调用。

二. 基本使用步骤

我们先以控制台程序为例,简单介绍Log4net存储日志到txt文本文档中,后面在做代码的详解。

1. 新建01-SimpleDemo控制台程序,通过指令 【Install-Package log4net】安装相应程序集。

aa27ee9bec0fb3d5d603f2493f5afd4c.png

2. 在默认配置文件中App.config(B/S程序则为web.config)中进行配置,主要分两块:

A. 在节点下新增节点下新增(要在其最顶部):

B. 在根节点下,配置log4net的核心配置代码, 主要节点如下:

详细代码如下:

 1 <?xml version="1.0" encoding="utf-8" ?> 2  3  4  5  6  7  8   9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25  26 27 28 29  30 31 32 33 34 

3. 代码调用

1 log4net.Config.XmlConfigurator.Configure();2 ILog log = LogManager.GetLogger("test");3 log.Debug("调试信息");

4. 运行结果

dc0bbbe053ac4a9bcd94506fdc490edc.png

截止此处,日志保存成功。

三. 初始化配置文件

 前面提到在默认配置文件中App.config(B/S程序则为web.config)中进行配置,可以通过代码 log4net.Config.XmlConfigurator.Configure(); 来初始化配置,或者还可以通过 [assembly: log4net.Config.XmlConfigurator()] 反射的形式进行初始化配置,二者可以达到同样的效果,代表了两种初始化配置文件的形式。

PS: [assembly: log4net.Config.XmlConfigurator()] 可以加在 当前使用文件的 namespace上作用于当前文件,或者加在Properties/AssemblyInfo.cs中,则该项目全局都无须再初始化了。

dce1c115cf3d691fb5274a2e80f16dcd.png
808b76d6e33579a2babe8aa443818fb1.png

在实际项目中,默认的配置文件里可能包含很多框架的信息,这个时候把 log4net的配置代码再放入进去,就会显得有点杂乱,或者有些“奇葩”的人把默认配置文件改名了,这个时候使用上述默认的两种方式就不好用了,那么这种情况怎么处理呢?

这里重点介绍 通过 log4net.Config.XmlConfigurator.Configure(); 来关联配置文件。

情况一: 使用默认配置文件的情况

1. 代码配置:log4net.Config.XmlConfigurator.Configure();

2. 反射配置:[assembly: log4net.Config.XmlConfigurator()]

(这里只是举例,很少有修改默认配置文件名称的)

1. 代码配置: 首先将App1.config文件的属性中的“生成操作”改为“ 嵌入的资源”,然后通过以下代码进行配置。

1 Assembly assembly = Assembly.GetExecutingAssembly();2 var xml = assembly.GetManifestResourceStream("_01_SimpleDemo.App1.config");3 log4net.Config.XmlConfigurator.Configure(xml);

注:代码中的 _01_SimpleDemo 为命名空间名。

2. 反射配置:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml")]

  注:用这种方式属性中的:复制到输出目录需要改为:始终复制,生成操作不需要配置,使用默认:无 即可

69104ce36180757a588e8ceb73a3c53a.png

情况三:新建单独xml文件,进行log4net的配置 (推荐采用这种方式,和原配置文件区分开,单独配置方便,处理方式和情况二是一致的)

1. 代码配置:首先将log4net.xml文件的属性中的“生成操作”改为“ 嵌入的资源”,然后通过以下代码进行配置。

1 Assembly assembly = Assembly.GetExecutingAssembly();2 var xml = assembly.GetManifestResourceStream("_01_SimpleDemo.log4net.xml");3 log4net.Config.XmlConfigurator.Configure(xml);

注:代码中的 _01_SimpleDemo 为命名空间名。

情况四:无论是修改默认配置文件的名称为 或者 新建单独的xml作为配置文件 → 可以通过绝对路径的方式进行处理 【不推荐这种方式】

1. 直接写绝对路径 (注意这种方式【不需要】配置文件属性为 “嵌入的资源”)

1 log4net.Config.XmlConfigurator.Configure(new FileInfo(@"D:06-我的开发之路DotNet体系05-DotNet框架篇03-Log4net详解Code01-SimpleDemolog4net.xml"));

2 通过代码获取绝对路径 (注意这种方式【不需要】配置文件属性的“生成操作”改为 “嵌入的资源”,但需要改为“始终复制”,确保输出到bin文件下)

1 string assemblyFilePath = Assembly.GetExecutingAssembly().Location;2 string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);3 string configFilePath = assemblyDirPath + " //log4net.xml";4 log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath));

PS:B/S程序下通过 log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~") + @"/log4net.xml")); 来配置。

四. 代码调用详解

Log4net允许多个ILog对象同时存在,通过代码:ILog log = LogManager.GetLogger("xxx"); 来创建。

A: 日志级别由高到低分别为:FATAL(致命错误) > ERROR(一般错误) > WARN(警告) > INFO(一般信息) > DEBUG(调试信息),另外还有 OFF和 ALL 。

几点说明:OFF表示所有信息都不写入,ALL表示所有信息都写入,我们也可以通过: level >这样配置,表示WARN级别以及高于WARN以上的级别才会被写入日志

B: 写入日志的方法有:Debug、Error、Fatal、Info、Warn五个方法,每个方法都有两个重载,如下图:

93fd6c944dd10d17aaf99f08da66f654.png

分享在使用配置文件为log4net.xml的情况下的调用代码:

 1 Assembly assembly = Assembly.GetExecutingAssembly(); 2 var xml = assembly.GetManifestResourceStream("_01_SimpleDemo.log4net.xml"); 3 log4net.Config.XmlConfigurator.Configure(xml); 4 ILog log = LogManager.GetLogger("test"); 5 log.Debug("调试信息"); 6 log.Info("一般信息"); 7 log.Warn("警告"); 8 try 9 {10 int.Parse("ddd");11 }12 catch (Exception ex)13 {14 log.Error("一般错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值