我在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).关于如何生 ...
随机推荐
- 防范永恒之蓝勒索病毒-XP、Win10文件共享怎样设置
企业内部员工之间的文件共享,是企业内部文件交换的重要手段.传统的文件共享是通过Windows的目录共享来实现的,而目录共享功能因其可能存在安全隐患使得很多企业分发放弃了这个文件共享模式. 如去年勒索病 ...
- MySQL之从忘记密码到重置密码
在对MySQL的应用中,难免会有忘记登陆密码的情况:接下来,将简单介绍下MySQL忘记密码如何登陆和重置密码的操作过程. 首先来说下新版MySQL(5.7+)的重置密码过程: 由于忘记登陆密码,所以正 ...
- leetcode 131 Palindrome Pairs
lc131 Palindrome Pairs 解法1: 递归 观察题目,要求,将原字符串拆成若干子串,且这些子串本身都为Palindrome 那么挑选cut的位置就很有意思,后一次cut可以建立在前一 ...
- synchronized ReentrantLock 比较分析
在编写多线程代码的时候,对于不允许并发的代码,很多需要加锁进行处理.在进行加锁处理时候,synchronized作为java的内置锁,同时也是java关键字,最为被人熟知,即使是最初级的java程序员 ...
- Duilib入门文档提供下载
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] Duilib入门文档 基本框架 编写界面xml 响应事件 贴图描述 类html文本描述 动态换肤 Dll插件 资源打包 Duil ...
- css过渡属性transition简单示例
2.transition 简单实例 demo1→在线预览源代码 效果 demo2→在线预览源代码 效果 demo3→在线预览源代码 效果
- 19-11-10-Night
关于$Miemeng$,它死了. 大家有没有记得我在暑假里曾经写过一个著名模数? const int Mod=998224353; 现在有续集了(捂脸)(改不过题.jpg) const int Mod ...
- sql自定义日期函数,返回范围内日期和星期数表。
Create function [dbo].[FUN_GenerateTime] ( @begin_date datetime, -- 起始时间 @end_date datetime -- 结束时间 ...
- tar指令集合
把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个, ...
- OpenGL学习笔记2017/8/29
OpenGL学习日志: 感谢doing5552 的OpenGL入门学习:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 相 ...