基于Common.Logging + Log4Net实现的日志管理

基于Common.Logging + Log4Net实现的日志管理
        </h1>
        <div class="clear"></div>
        <div class="postBody">

前言

Common.LoggingCommons-Logging(apache最早提供的日志门面接口,提供了简单的日志实现以及日志解耦功能) 项目的.net版本。其目的是为 "所有的.net日志实现"提供一个统一的接口,在系统的迭代过程中,可灵活的切换不同的日志实现组件(Log4Net、NLog、EntLib等)。

原理

Common.Logging.LogManager类 作为操作日志实例的主接口,提供了3个对外的方法来获取日志实例

上图所示的Adapter是日志实例工厂类,是从配置文件中获取并创建的
Web.config中的配置, factoryAdapter 节点类型为Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter,该类就是日志实例工厂类的实现。 ![ common.logging配置](http://qiniu.youleqp.cn/common.logging%E9%85%8D%E7%BD%AE.png)

如何集成至项目

Common.logging结合Log4Net如何集成至项目中实现日志管理?

选择安装的版本

查看Log4Net的官方版本发布记录发现,从1.2.11版本开始支持的.NET 3.5 和 .NET 4.0, 从2.0.6版本(17年5月)开始支持.NET Core 和 .NET Standard 1.3。那么我们选择的Log4Net版本,至少得是1.2.11版本。 而适配Common.Logging的Log4Net插件版本也有很多(主要是不同版本的Log4Net进行适配),我选择的是Common.Logging.Log4Net1211.
	Common.Logging.Log4Net适配的版本

在项目中最好是使用Nuget安装包,会自动关联其Log4Net的版本

先安装 Common.Logging

Install-Package Common.Logging -Version 3.3.1

再安装Common.Logging.Log4Net1211

Install-Package Common.Logging.Log4Net1211 -Version 3.3.1

web.config的配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
  </configSections>
  <common>
    <!--[DEBUG < INFO < WARN < ERROR < FATAL]-->
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1211">
        <!--表示log4net的配置直接写在配置文件里-->
        <!--<arg key="configType" value="INLINE"/>-->
        <!--log4net使用独立的配置文件-->
        <arg key="configType" value="FILE-WATCH" />
        <arg key="configFile" value="~/XmlConfig/log4net.config" />
      </factoryAdapter>
    </logging>
  </common>
</configuration>

log4net的配置

<?xml version="1.0" encoding="utf-8"?>

<log4net>
<appender name=“RollingFileAppender” type=“log4net.Appender.RollingFileAppender”>
<!–目录路径,可以是相对路径或绝对路径–>
<file value=“Log/” />
<!–日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置–>
<datePattern value=‘yyyy-MM-dd/“info.log”’ />
<!–追加到文件–>
<appendToFile value=“true” />
<!–创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]–>
<rollingStyle value=“Composite” />
<!–写到一个文件–>
<staticLogFileName value=“false” />
<!–单个文件大小。单位:KB|MB|GB–>
<maximumFileSize value=“200MB” />
<!–最多保留的文件数,设为"-1"则不限–>
<maxSizeRollBackups value="-1" />
<!–日志格式–>
<layout type=“log4net.Layout.PatternLayout”>
<conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
</layout>
</appender>

&lt;appender name=&quot;TraceRollingFileAppender&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;
	&lt;!--目录路径,可以是相对路径或绝对路径--&gt;
	&lt;file value=&quot;Log/&quot; /&gt;
	&lt;!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置--&gt;
	&lt;datePattern value='yyyy-MM-dd/&quot;trace.log&quot;' /&gt;
	&lt;!--追加到文件--&gt;
	&lt;appendToFile value=&quot;true&quot; /&gt;
	&lt;!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--&gt;
	&lt;rollingStyle value=&quot;Composite&quot; /&gt;
	&lt;!--写到一个文件--&gt;
	&lt;staticLogFileName value=&quot;false&quot; /&gt;
	&lt;!--单个文件大小。单位:KB|MB|GB--&gt;
	&lt;maximumFileSize value=&quot;200MB&quot; /&gt;
	&lt;!--最多保留的文件数,设为&quot;-1&quot;则不限--&gt;
	&lt;maxSizeRollBackups value=&quot;-1&quot; /&gt;
	&lt;!--日志格式--&gt;
	&lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
		&lt;conversionPattern value=&quot;%-5level %date [%-5.5thread] %-40.40logger - %message%newline&quot; /&gt;
	&lt;/layout&gt;
&lt;/appender&gt;

&lt;appender name=&quot;WarnRollingFileAppender&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;
	&lt;!--目录路径,可以是相对路径或绝对路径--&gt;
	&lt;file value=&quot;Log/&quot; /&gt;
	&lt;!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置--&gt;
	&lt;datePattern value='yyyy-MM-dd/&quot;warn.log&quot;' /&gt;
	&lt;!--追加到文件--&gt;
	&lt;appendToFile value=&quot;true&quot; /&gt;
	&lt;!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--&gt;
	&lt;rollingStyle value=&quot;Composite&quot; /&gt;
	&lt;!--写到一个文件--&gt;
	&lt;staticLogFileName value=&quot;false&quot; /&gt;
	&lt;!--单个文件大小。单位:KB|MB|GB--&gt;
	&lt;maximumFileSize value=&quot;200MB&quot; /&gt;
	&lt;!--最多保留的文件数,设为&quot;-1&quot;则不限--&gt;
	&lt;maxSizeRollBackups value=&quot;-1&quot; /&gt;
	&lt;!--日志格式--&gt;
	&lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
		&lt;conversionPattern value=&quot;%-5level %date [%-5.5thread] %-40.40logger - %message%newline&quot; /&gt;
	&lt;/layout&gt;
&lt;/appender&gt;

&lt;appender name=&quot;ErrorRollingFileAppender&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;
	&lt;!--目录路径,可以是相对路径或绝对路径--&gt;
	&lt;file value=&quot;Log/&quot; /&gt;
	&lt;!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置--&gt;
	&lt;datePattern value='yyyy-MM-dd/&quot;error.log&quot;' /&gt;
	&lt;!--追加到文件--&gt;
	&lt;appendToFile value=&quot;true&quot; /&gt;
	&lt;!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--&gt;
	&lt;rollingStyle value=&quot;Composite&quot; /&gt;
	&lt;!--写到一个文件--&gt;
	&lt;staticLogFileName value=&quot;false&quot; /&gt;
	&lt;!--单个文件大小。单位:KB|MB|GB--&gt;
	&lt;maximumFileSize value=&quot;200MB&quot; /&gt;
	&lt;!--最多保留的文件数,设为&quot;-1&quot;则不限--&gt;
	&lt;maxSizeRollBackups value=&quot;-1&quot; /&gt;
	&lt;!--日志格式--&gt;
	&lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
		&lt;conversionPattern value=&quot;%-5level %date [%-5.5thread] %-40.40logger - %message%newline&quot; /&gt;
	&lt;/layout&gt;
&lt;/appender&gt;

&lt;root&gt;
	&lt;appender-ref ref=&quot;RollingFileAppender&quot; /&gt;
	&lt;!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
如果没有定义LEVEL的值,则缺省为DEBUG--&gt;
	&lt;level value=&quot;INFO&quot; /&gt;
&lt;/root&gt;

&lt;!--TraceLog 名称固定,写入调试跟踪日志--&gt;
&lt;logger name=&quot;TraceLog&quot; additivity=&quot;false&quot;&gt;
	&lt;appender-ref ref=&quot;TraceRollingFileAppender&quot; /&gt;
	&lt;level value=&quot;INFO&quot; /&gt;
&lt;/logger&gt;
&lt;!--Warnlog 名称固定,写入警告日志--&gt;
&lt;logger name=&quot;WarnLog&quot; additivity=&quot;false&quot;&gt;
	&lt;appender-ref ref=&quot;WarnRollingFileAppender&quot; /&gt;
	&lt;level value=&quot;WARN&quot; /&gt;
&lt;/logger&gt;
&lt;!--Errorlog 名称固定,写入异常错误日志--&gt;
&lt;logger name=&quot;ErrorLog&quot; additivity=&quot;false&quot;&gt;
	&lt;appender-ref ref=&quot;ErrorRollingFileAppender&quot; /&gt;
	&lt;level value=&quot;ERROR&quot; /&gt;
&lt;/logger&gt;

</log4net>

更多参数配置说明,请移步Log4Net官网

应用案例

在实际的项目中,我们还封装了LogHelper类用来获取定义好的日志实例(ErrorLog、WarnLog、TraceLog),具体使用如下:

LogHelper.Trace("log222");
LogHelper.Warn("log222");
LogHelper.Error(new Exception('出错了'));

有关LogHelper的源代码,以及测试demo,我已整理放至github上https://github.com/yinboxie/BlogExampleDemo

参考

1、使用Common.Logging+log4net规范日志管理
2、Common.Logging源码解析
3、Log4net配置与使用简要说明
4、非常完善的Log4net详细说明

作者: 沉淀的风

出处:https://www.cnblogs.com/xyb0226/p/11115884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值