我在C#应用中一般使用log4net来记录日志,但如果项目中有个多个工程,那么没有工程都需要引用log4neg,感觉很不爽。不过今日在开spring.net的时候,看到了有个通用日志接口Common Logging,可以很好的解决项目中多个工程的问题。由于Common Logging是一个日志的基础设施接口,因此更换到其他日志框架,也不需要修改程序代码。
因为我不愿意将所有的配置参数都写入到app.config.xml,那样会把配置文件弄得很大、很乱。我的思路是:在配置文件中加载Common Logging, 通过Common Logging的Adapter的参数制定Log4net文件的位置,而spring的配置文件可以通过应用程序加载或者在app.config.xml中加载都可以。
Common Logging的配置如下:(ver:1.2.0.0,该版本有spring决定)
<?xml version="1.0" encoding="utf-8" ?> |
<sectionGroup name="common"> |
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" /> |
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net"> |
<arg key="configType" value="FILE" /> <!-- FILE,FILE-WATCH,INLINE,EXTERNAL--> |
<arg key="configFile" value="~/log4net.xml" /> |
<arg key="level" value="INFO" /> |
而Log4net的配置也终于实现了将错误日志和业务日志分离的功能。具体配置如下:(ver:1.2.10)
<?xml version="1.0" encoding="utf-8" ?> |
<appender name="debugLog" type="log4net.Appender.RollingFileAppender,log4net" > |
<param name="File" value="logs\debug.log" /> |
<param name="AppendToFile" value="true" /> |
<param name="RollingStyle" value="Date" /> |
<param name="DatePattern" value="yyyyMMdd" /> |
<param name="StaticLogFileName" value="true" /> |
<layout type="log4net.Layout.PatternLayout,log4net"> |
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}%newline%message%n" /> |
<filter type="log4net.Filter.LevelRangeFilter"> |
<param name="LevelMin" value="DEBUG" /> |
<appender name="infoLog" type="log4net.Appender.RollingFileAppender,log4net" > |
<param name="File" value="logs\info.log" /> |
<param name="AppendToFile" value="true" /> |
<param name="RollingStyle" value="Date" /> |
<param name="DatePattern" value="yyyyMMdd" /> |
<param name="StaticLogFileName" value="true" /> |
<layout type="log4net.Layout.PatternLayout,log4net"> |
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> |
<filter type="log4net.Filter.LevelRangeFilter"> |
<param name="LevelMin" value="INFO" /> |
<param name="LevelMax" value="INFO" /> |
<appender name="errorLog" type="log4net.Appender.RollingFileAppender,log4net" > |
<param name="File" value="logs\error.log" /> |
<param name="AppendToFile" value="true" /> |
<param name="RollingStyle" value="Date" /> |
<param name="DatePattern" value="yyyyMMdd" /> |
<param name="StaticLogFileName" value="true" /> |
<layout type="log4net.Layout.PatternLayout,log4net"> |
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}%newline%message%n" /> |
<filter type="log4net.Filter.LevelRangeFilter"> |
<param name="LevelMin" value="ERROR" /> |
<param name="LevelMax" value="ERROR" /> |
<appender-ref ref="debugLog" /> |
<appender-ref ref="infoLog"/> |
<appender-ref ref="errorLog" /> |
</log4net>
- 使用Common.Logging+log4net规范日志管理
Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大的具体实现,也可以用其它不同的实现,如EntLib的日志.NLog ...
- 使用Common.Logging+log4net规范日志管理【转载】
使用Common.Logging+log4net规范日志管理 Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大 ...
- Common.Logging.dll----------配置方式,可选引用,用于日志输出
1.简介common logging是一个通用日志接口,log4net是一个具体实现. common logging可以把输出连接到其他非log类上, 如EntLib的日志.NLog等 2.使用接下来 ...
- 基于Common.Logging + Log4Net实现的日志管理
前言 Common.Logging 是Commons-Logging(apache最早提供的日志门面接口,提供了简单的日志实现以及日志解耦功能) 项目的.net版本.其目的是为 "所有的.n ...
- Python 中 logging 日志模块在多进程环境下的使用
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 中 logging 日志模块在多进程环境下的使用 使用 Pytho ...
- Python中内置的日志模块logging用法详解
logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/P ...
- python中的logging日志模块
日志是程序不可或缺的一部分.它可以记录程序的运行情况,帮助我们更便捷地发现问题,而python中的logging日志模块给我们提供了这个机会. logging给我们提供了五种函数用来输出日志:debu ...
- 使用Common.Logging与log4net的组件版本兼容问题
引用: http://www.cnblogs.com/shijun/p/3713830.html 近期使用了Common.Logging的ILog接口做日志接口,同时利用其log4net适配器与lo ...
- Common.Logging源码解析二
Common.Logging源码解析一分析了LogManager主入口的整个逻辑,其中第二步生成日志实例工厂类接口分析的很模糊,本随笔将会详细讲解整个日志实例工厂类接口的生成过程! (1).关于如何生 ...
随机推荐
- 辨析JspWriter和PrintWriter
JspWriter和PrintWriter的区别? JspWriter相当于带缓冲的PrintWriter 如何控制out缓冲? 通过设置JSP页面page指令的buffer属性, 可以调整out缓冲 ...
- 关于安装了sqlite对于vs的组件,重启vs后,在外面可以连接sqlite数据库,但是在建立实体模型时没有sqlite数据源的问题
出自:http://bbs.csdn.net/topics/390917337 兄弟,刚刚在stackoverflow上找到了解决方法了http://stackoverflow.com/questio ...
- 有关阿里云对SaaS行业的思考,看这一篇就够了
过去二十年,随着改革开放的深化,以及中国的人口红利等因素,中国诞生了大批To C的高市值互联网巨头,2C的领域高速发展,而2B领域一直不温不火.近两年来,在C端流量饱和,B端数字化转型来临的背景下,中 ...
- JS 计算时间范围,最近一周、一个月
//最近一周 getDay(-7) 返回的是距离当前日期的一周后的时间//一月 getDay(-30)//一年 getDay(-365) function getDay(day){ var today ...
- 洛谷P4550 【收集邮票】
题目链接: 神仙题QAQ 题目分析: 概率期望题是不可能会的,一辈子都不可能会的QAQ 这个题也太仙了 首先明确一下题意里面我感觉没太说清楚的地方,这里是抽到第\(i\)次要\(i\)元钱,不是抽到第 ...
- Nginx简介与基础配置
何为Nginx? Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.最初是为了解决C10k的问题,由Igor ...
- 使用由 Python 编写的 lxml 实现高性能 XML 解析
lxml 简介 Python 从来不出现 XML 库短缺的情况.从 2.0 版本开始,它就附带了 xml.dom.minidom 和相关的 pulldom 以及 Simple API for XML ...
- watch、tail联合使用
因为用了tmux,不想调整窗格大小,只想输出命令结果的最后几行,所以就想出了这个方法. watch.tail联合用法 watch 'echo "`nvidia-smi`" | ta ...
- 基于阿里云安装脚本扩展 之 自动安装mongodb及php扩展
好久没有发布文章了,有点跟不上当初这个博客的初衷.为了使自己的博客更新不半途而废,今天特意再写了一个自动安装脚本,一样是基于阿里云的服务端安装脚本进行的扩展.闲话不说,直接放代码: #!/bin/ba ...
- STL中的unique()和lower_bound ,upper_bound
unique(): 作用:unique()的作用是去掉容器中相邻元素的重复元素(数组可以是无序的,比如数组可以不是按从小到大或者从大到小的排列方式) 使用方法:unique(初始地址,末地址): 这里 ...