原文地址:http://blog.csdn.net/pfe_nova/article/details/20072137

1.单文件日志

对于单文件的日志,封装代码如下:

  

public enum LogMessageType
{
Debug,
Info,
Warn,
Error,
Fatal
}
public sealed class LogProvider
{
private static readonly ILog provider = GetLogger();
static LogProvider() { }
private LogProvider() { } public static void Write(string msg, LogMessageType msgType, Exception ex = null)
{
WriteLog(msg, msgType, ex);
}
public static void InitConfig()
{
XmlConfigurator.Configure();
}
public static void ShutDown()
{
LogManager.Shutdown();
} private static ILog GetLogger()
{
InitConfig();
return LogManager.GetLogger("DefaultLogger");
}
private static void WriteLog(string msg, LogMessageType msgType, Exception ex)
{
if (provider != null)
{
switch (msgType)
{
case LogMessageType.Debug:
provider.Debug(msg, ex);
break;
case LogMessageType.Info:
provider.Info(msg, ex);
break;
case LogMessageType.Warn:
provider.Warn(msg, ex);
break;
case LogMessageType.Error:
provider.Error(msg, ex);
break;
case LogMessageType.Fatal:
provider.Fatal(msg, ex);
break;
}
}
}
}

这样所有要记日志的地方只需要LogProvider.Write("this is Log", LogMessageType.Error);一行代码即可,Log4net初始化工作封装在初始化器中,在第一次调用Log4net时进行自动初始化。LogProvider类开放出三个静态方法:Write、InitConfig、ShutDown,后两者用于在程序中手动控制Log4net的开启和关闭;Write方法采用默认参数,达到重载的效果。配置文件如下:

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<logger name="DefaultLogger">
<level value="ALL"/>
<appender-ref ref="txtLogger" />
</logger>
<appender name="txtLogger"
type="log4net.Appender.RollingFileAppender,log4net" >
<File value="Log\Log.txt" />
<datePattern value="(yyyyMMdd)"/>
<appendToFile value="true"/>
<RollingStyle value="Composite"/>
<MaxSizeRollBackups value=""/>
<maximumFileSize value="1MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t]%-5p %c - %m%n"/>
</layout>
</appender>
</log4net>
<startup/>
</configuration>

唯一要注意的就是<logger name="DefaultLogger">这个用来关联,帮助类中要和配置文件中一致,其他的参数说明参照这以前写的log4net的配置详解

2.分级别记录日志

重构代码时我想起我们原来的日志框架有个功能是把不同级别的日志分开记录的,例如把奔溃和错误记在一起一个文件中,警告和信息记在一个文件中,查问题时就可以先看重大错误。针对这个需求调查了下,也可以在配置文件中配置的,配置文件如下:

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<logger name="DefaultLogger">
<level value="ALL"/>
<appender-ref ref="InfoLoging" />
<appender-ref ref="ErrorLoging" />
</logger>
<!--DefaultLogger Info Log-->
<appender name="InfoLoging"
type="log4net.Appender.RollingFileAppender,log4net" >
<File value="Log\LogTipMsg.txt" />
<datePattern value="(yyyyMMdd)"/>
<appendToFile value="true"/>
<RollingStyle value="Composite"/>
<MaxSizeRollBackups value=""/>
<maximumFileSize value="1MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t]%-5p %c - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMin value="DEBUG"/>
<LevelMax value="Warn"/>
</filter>
</appender>
<!--DefaultLogger Error Log-->
<appender name="ErrorLoging"
type="log4net.Appender.RollingFileAppender,log4net" >
<File value="Log\LogErrorMsg.txt" />
<datePattern value="(yyyyMMdd)"/>
<appendToFile value="true"/>
<RollingStyle value="Composite"/>
<MaxSizeRollBackups value=""/>
<maximumFileSize value="1MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t]%-5p %c - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMin value="ERROR" />
</filter>
</appender>
</log4net>
<startup/>
</configuration>

3.按业务逻辑记录日志

另一个情况就是按业务模块记录到不同的文件中,此时同样可以通过配置来获得,配置文件如下:

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<logger name="DefaultLogger">
<level value="ALL"/>
<appender-ref ref="InfoLoging" />
<appender-ref ref="ErrorLoging" />
</logger>
<logger name="OtherCustomerLogger">
<level value="Info"/>
<appender-ref ref="OtherInfoLoging" />
</logger>
<!--DefaultLogger Info Log-->
<appender name="InfoLoging"
type="log4net.Appender.RollingFileAppender,log4net" >
<File value="Log\LogTipMsg.txt" />
<datePattern value="(yyyyMMdd)"/>
<appendToFile value="true"/>
<RollingStyle value="Composite"/>
<MaxSizeRollBackups value=""/>
<maximumFileSize value="1MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t]%-5p %c - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMin value="DEBUG"/>
<LevelMax value="Warn"/>
</filter>
</appender>
<!--DefaultLogger Error Log-->
<appender name="ErrorLoging"
type="log4net.Appender.RollingFileAppender,log4net" >
<File value="Log\LogErrorMsg.txt" />
<datePattern value="(yyyyMMdd)"/>
<appendToFile value="true"/>
<RollingStyle value="Composite"/>
<MaxSizeRollBackups value=""/>
<maximumFileSize value="1MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t]%-5p %c - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMin value="ERROR" />
</filter>
</appender>
<!--OtherCustomerLogger OtherInfo Log-->
<appender name="OtherInfoLoging"
type="log4net.Appender.RollingFileAppender,log4net" >
<File value="Log\LogOtherInfoLoging.txt" />
<datePattern value="(yyyyMMdd)"/>
<appendToFile value="true"/>
<RollingStyle value="Composite"/>
<MaxSizeRollBackups value=""/>
<maximumFileSize value="1MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t]%-5p %c - %m%n"/>
</layout>
</appender>
</log4net>
<startup/>
</configuration>

帮助类调整如下:

public enum LogicType
{
DefaultLogger,
OtherCustomerLogger
}
public enum LogMessageType
{
Debug,
Info,
Warn,
Error,
Fatal
}
public sealed class LogProvider
{
static LogProvider() { }
private LogProvider() { } private static readonly Dictionary<string, ILog> dicLoggers = GetLoggers(); public static void Write(string msg, LogMessageType msgType, Exception ex = null)
{
WriteLog(msg, msgType, ex);
}
public static void Write(string msg,
LogMessageType msgType, LogicType logicType, Exception ex = null)
{
WriteLog(msg, msgType, ex, logicType.ToString());
}
public static void InitConfig()
{
XmlConfigurator.Configure();
}
public static void ShutDown()
{
LogManager.Shutdown();
} static Dictionary<string, ILog> GetLoggers()
{
InitConfig();
ILog[] allLoggers = LogManager.GetCurrentLoggers();
Dictionary<string, ILog> dicLoggers = new Dictionary<string, ILog>();
foreach (var logger in allLoggers)
{
dicLoggers.Add(logger.Logger.Name, logger);
}
return dicLoggers;
}
static void WriteLog(string msg,
LogMessageType msgType, Exception ex, string logicType = "DefaultLogger")
{
if (dicLoggers != null && dicLoggers[logicType] != null)
{
switch (msgType)
{
case LogMessageType.Debug:
dicLoggers[logicType].Debug(msg, ex);
break;
case LogMessageType.Info:
dicLoggers[logicType].Info(msg, ex);
break;
case LogMessageType.Warn:
dicLoggers[logicType].Warn(msg, ex);
break;
case LogMessageType.Error:
dicLoggers[logicType].Error(msg, ex);
break;
case LogMessageType.Fatal:
dicLoggers[logicType].Fatal(msg, ex);
break;
}
}
}
}

增加了LogicType这个枚举,记录特定业务逻辑日志时LogProvider.Write("this is Other Info", LogMessageType.Info, LogicType.OtherCustomerLogger)。实际操作时就是根据业务逻辑扩充这个枚举。
        至此,这个版本已经能够直接拿到项目中用了,只需配置即可,不需要额外改动代码。

后记:在封装过程中也遇到了一些问题,例如readonly和静态构造函数的问题,当时对其理解不够彻底,疑惑了一阵,以后有空一并总结出来。虽然是终结版,能够作为项目的稳定版本,但也还有一些不足,例如只想滚动保存6个月的日志,现在就不知道log4net能不能实现(或者说怎么实现,如果让我实现我就只能另外写个线程每天遍历一次,如果有6个月前的日志就将其删掉)。希望能对读者有些帮助,如果有什么错误或想法,还望不吝指教,转载请保留原文链接

(转)Log4net 配置类库的更多相关文章

  1. 一、Log4Net配置

    Core的配置 一.创建core包含控制和视图的项目以及Log4Net引用 二.创建Log4Net配置文件 右击项目->添加文件   Log4Net.config 2 复制以下代码 以下配置可做 ...

  2. ASP.NET MVC学习之Log4Net配置(日志记录)

    Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...

  3. JWT+Log4net配置与使用

    Log4net的优点        log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.程序运行过 ...

  4. Common.Logging log4net Common.Logging.Log4Net 配置

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

  5. Log4Net 配置StmpAppender

    目录 Log4Net 配置StmpAppender    1 1.前言    1 2.详细配置    1 1.StmpAppender配置    1 2.Root 配置    2 3.更多选项     ...

  6. C# Log4Net配置

    Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...

  7. Log4net配置与使用简要说明

    log4net详细配置:http://logging.apache.org/log4net/本文描述如有错误,以官网的说明为准;p 一:先来看看log4net中的几个概念: 1. log4net继承机 ...

  8. MVC Log4Net 配置

    1.引用log4net.dll 2.在项目根目录下增加log4.config文件 <?xml version="1.0"?> <configuration> ...

  9. C# 日志系统 log4net 配置及使用

    1.引用Dll 版本是:1.2.10.0,下载Dll 2.Web.config文件配置 <?xml version="1.0" encoding="utf-8&qu ...

随机推荐

  1. MySQLAdmin用法

    MySQLAdmin用法用于执行管理性操作.语法是:shell> mysqladmin [OPTIONS] command [command-option] command ...通过执行mys ...

  2. Hive(六):HQL DDL

    HQL语法基于 SqlLine(http://sqlline.sourceforge.net/),DDL主要包含数据库.函数.视图的创建.修改.删除,参考资料:(https://cwiki.apach ...

  3. 配置Windows Server2008+iis+php+mysql所需下载安装包

    最近一个朋友让我帮忙给配置服务器iis+php+mysq 环境,遇到了很多问题,特此就在这里说一下.小弟只是在windwos2003 和windwos XP下配置过iis+php+mysql,去朋友那 ...

  4. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  5. OC—设计模式-通知的使用

    通知 通知(广播) 可以一对多的发送通知(一个发送者 多个观察者) 特别注意:在发送者 发送通知的时候,必须有观察者 发送者,就是注册一个通知中心,以他为中心,发送消息 通过通知的名字,来判断是哪个通 ...

  6. 关于checkbox的attr无效的问题

    jq用了10版本的,一直发现attr无效,查找良久,由同事帮忙解决该问题,感谢. 特记录下该问题. 由于 新版本attr换成了prop的问题. $("input[name='delIds'] ...

  7. asp.net get App_Data 目录几种方法 path

    方法一 //ASP.NET MVC1 -> MVC3 string path = HttpContext.Current.Server.MapPath("~/App_Data/some ...

  8. Windows 7无线网卡启用wifi共享蓝屏!

    我的笔记本是联想Y460P,装的是Windows 7 Ultiame(x64)系统,通过设置笔记本的无线(Intel WiFi Link 1000 BGN)搭建Wifi环境并共享,使手机能够通过笔记本 ...

  9. sublime text 3 安装注释

    sublime text 3 1.安装Sublime Text 3  下载安装:http://www.sublimetext.com/3 Package Control安装:https://subli ...

  10. SQL server 学习笔记1

    1.查询安装的排序规则选项喝当前的排序规则服务器属性 select * from fn_helpcollations(); 2.查看当前服务器的排序规则 select serverproperty(' ...