前言

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.

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

先安装 Common.Logging

  1. Install-Package Common.Logging -Version 3.3.1

再安装Common.Logging.Log4Net1211

  1. Install-Package Common.Logging.Log4Net1211 -Version 3.3.1

web.config的配置

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <configSections>
  4. <sectionGroup name="common">
  5. <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
  6. </sectionGroup>
  7. </configSections>
  8. <common>
  9. <!--[DEBUG < INFO < WARN < ERROR < FATAL]-->
  10. <logging>
  11. <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1211">
  12. <!--表示log4net的配置直接写在配置文件里-->
  13. <!--<arg key="configType" value="INLINE"/>-->
  14. <!--log4net使用独立的配置文件-->
  15. <arg key="configType" value="FILE-WATCH" />
  16. <arg key="configFile" value="~/XmlConfig/log4net.config" />
  17. </factoryAdapter>
  18. </logging>
  19. </common>
  20. </configuration>

log4net的配置

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <log4net>
  3. <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  4. <!--目录路径,可以是相对路径或绝对路径-->
  5. <file value="Log/" />
  6. <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
  7. <datePattern value='yyyy-MM-dd/"info.log"' />
  8. <!--追加到文件-->
  9. <appendToFile value="true" />
  10. <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
  11. <rollingStyle value="Composite" />
  12. <!--写到一个文件-->
  13. <staticLogFileName value="false" />
  14. <!--单个文件大小。单位:KB|MB|GB-->
  15. <maximumFileSize value="200MB" />
  16. <!--最多保留的文件数,设为"-1"则不限-->
  17. <maxSizeRollBackups value="-1" />
  18. <!--日志格式-->
  19. <layout type="log4net.Layout.PatternLayout">
  20. <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
  21. </layout>
  22. </appender>
  23. <appender name="TraceRollingFileAppender" type="log4net.Appender.RollingFileAppender">
  24. <!--目录路径,可以是相对路径或绝对路径-->
  25. <file value="Log/" />
  26. <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
  27. <datePattern value='yyyy-MM-dd/"trace.log"' />
  28. <!--追加到文件-->
  29. <appendToFile value="true" />
  30. <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
  31. <rollingStyle value="Composite" />
  32. <!--写到一个文件-->
  33. <staticLogFileName value="false" />
  34. <!--单个文件大小。单位:KB|MB|GB-->
  35. <maximumFileSize value="200MB" />
  36. <!--最多保留的文件数,设为"-1"则不限-->
  37. <maxSizeRollBackups value="-1" />
  38. <!--日志格式-->
  39. <layout type="log4net.Layout.PatternLayout">
  40. <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
  41. </layout>
  42. </appender>
  43. <appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
  44. <!--目录路径,可以是相对路径或绝对路径-->
  45. <file value="Log/" />
  46. <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
  47. <datePattern value='yyyy-MM-dd/"warn.log"' />
  48. <!--追加到文件-->
  49. <appendToFile value="true" />
  50. <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
  51. <rollingStyle value="Composite" />
  52. <!--写到一个文件-->
  53. <staticLogFileName value="false" />
  54. <!--单个文件大小。单位:KB|MB|GB-->
  55. <maximumFileSize value="200MB" />
  56. <!--最多保留的文件数,设为"-1"则不限-->
  57. <maxSizeRollBackups value="-1" />
  58. <!--日志格式-->
  59. <layout type="log4net.Layout.PatternLayout">
  60. <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
  61. </layout>
  62. </appender>
  63. <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
  64. <!--目录路径,可以是相对路径或绝对路径-->
  65. <file value="Log/" />
  66. <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
  67. <datePattern value='yyyy-MM-dd/"error.log"' />
  68. <!--追加到文件-->
  69. <appendToFile value="true" />
  70. <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
  71. <rollingStyle value="Composite" />
  72. <!--写到一个文件-->
  73. <staticLogFileName value="false" />
  74. <!--单个文件大小。单位:KB|MB|GB-->
  75. <maximumFileSize value="200MB" />
  76. <!--最多保留的文件数,设为"-1"则不限-->
  77. <maxSizeRollBackups value="-1" />
  78. <!--日志格式-->
  79. <layout type="log4net.Layout.PatternLayout">
  80. <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
  81. </layout>
  82. </appender>
  83. <root>
  84. <appender-ref ref="RollingFileAppender" />
  85. <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
  86. 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
  87. 如果没有定义LEVEL的值,则缺省为DEBUG-->
  88. <level value="INFO" />
  89. </root>
  90. <!--TraceLog 名称固定,写入调试跟踪日志-->
  91. <logger name="TraceLog" additivity="false">
  92. <appender-ref ref="TraceRollingFileAppender" />
  93. <level value="INFO" />
  94. </logger>
  95. <!--Warnlog 名称固定,写入警告日志-->
  96. <logger name="WarnLog" additivity="false">
  97. <appender-ref ref="WarnRollingFileAppender" />
  98. <level value="WARN" />
  99. </logger>
  100. <!--Errorlog 名称固定,写入异常错误日志-->
  101. <logger name="ErrorLog" additivity="false">
  102. <appender-ref ref="ErrorRollingFileAppender" />
  103. <level value="ERROR" />
  104. </logger>
  105. </log4net>

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

应用案例

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

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

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

参考

1、使用Common.Logging+log4net规范日志管理

2、Common.Logging源码解析

3、Log4net配置与使用简要说明

4、非常完善的Log4net详细说明

基于Common.Logging + Log4Net实现的日志管理的更多相关文章

  1. 使用Common.Logging+log4net规范日志管理【转载】

    使用Common.Logging+log4net规范日志管理   Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大 ...

  2. 使用Common.Logging+log4net规范日志管理

    Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大的具体实现,也可以用其它不同的实现,如EntLib的日志.NLog ...

  3. Common.Logging log4net Common.Logging.Log4Net 配置

    1.log4net 单独配置 log4net支持多种格式的日志输出,我这里只配置输出到本地的txt文件这种格式. <log4net> <root> <appender-r ...

  4. 基于docker部署使用ELK+FileBeat日志管理平台

    Docker从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,专业叫法为 Application Container(应用容器).Docker进程和普通的进程没有任何区别,它就是一个普通的应用进程 ...

  5. 使用Common.Logging与log4net的组件版本兼容问题

    引用:  http://www.cnblogs.com/shijun/p/3713830.html 近期使用了Common.Logging的ILog接口做日志接口,同时利用其log4net适配器与lo ...

  6. Common.Logging.dll----------配置方式,可选引用,用于日志输出

    1.简介common logging是一个通用日志接口,log4net是一个具体实现. common logging可以把输出连接到其他非log类上, 如EntLib的日志.NLog等 2.使用接下来 ...

  7. 在C#应用中使用Common Logging日志接口

    我在C#应用中一般使用log4net来记录日志,但如果项目中有个多个工程,那么没有工程都需要引用log4neg,感觉很不爽.不过今日在开spring.net的时候,看到了有个通用日志接口Common ...

  8. Log4net 写文件日志与数据库日志

    一.数据库日志表结构 CREATE TABLE [dbo].[WebLog_Msg]( [LogID] [int] IDENTITY(1,1) NOT NULL, [Date] [datetime]  ...

  9. Common.Logging源码解析二

    Common.Logging源码解析一分析了LogManager主入口的整个逻辑,其中第二步生成日志实例工厂类接口分析的很模糊,本随笔将会详细讲解整个日志实例工厂类接口的生成过程! (1).关于如何生 ...

随机推荐

  1. LeetCode: Generate Parentheses [021]

    [称号] Given n pairs of parentheses, write a function to generate all combinations of well-formed pare ...

  2. 一些常用的WebServices

    天气预报Web服务,数据来源于中国气象局 Endpoint  Disco  WSDL IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据) Endpoint  Disco  WSDL 随机英文 ...

  3. CCD 与 CMOS

    窗帘快门与全局快门: 窗帘快门,每次只允许一条缝的光线摄入,因此会呈现自上而下的扫描式拍摄,也就意味着画面上的不同高度,其实拍摄的时间是不同的,也就进一步造成了在高速移动的火车上,如果拍摄窗外的景物, ...

  4. .Net Remoting的双向通信和Windows Service的宿主服务

    原文:.Net Remoting的双向通信和Windows Service的宿主服务 作为微软分布式技术之一的.Net Remoting,从性能.安全等各方面来说都是相对比较稳定的,也是一项比较成熟的 ...

  5. 简述WPF中的图像像素格式(PixelFormats)

    原文:简述WPF中的图像像素格式(PixelFormats) --------------------------------------------------------------------- ...

  6. 用Python模拟浏览器操作

    两种思绪三种要领: 用pamie.建议不要使用,因为pamie为小我私人开发,里面的bug比力多,并且是直接使用win32com体式格局的,如果ie不警惕修改了,后果很严重.另外,pamie3使用的是 ...

  7. crossplatform---Nodejs in Visual Studio Code 02.学习Nodejs

    1.开始 源码下载:https://github.com/sayar/NodeMVA 在线视频:https://mva.microsoft.com/en-US/training-courses/usi ...

  8. android viewpager fragment切换时界面卡顿解决办法

    目前开发的程序在切换View时界面卡顿现象比较严重,影响用户体验,当前项目共就四个View,每个View也只是按钮,所以可以同时加载,不让其它view销毁. 只需在Adapter中重载destroyI ...

  9. 【Android发展】它Fragment发展1

    一直知道Fragment非常强大.可是一直都没有去学习,如今有些空暇的时间,所以就去学习了一下Fragment的简单入门.我也会把自己的学习过程写下来,假设有什么不足的地方希望大牛指正,共同进步. 一 ...

  10. WPF ListBoxItem模板中添加CheckBox选中问题

    原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ...