原文地址: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. Android启动画面实现

    每个Android应用程序启动之后都会出现一个Splash启动界面,显示产品LOGO.公司LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥 ...

  2. innodb数据库批量转换表引擎为MyISAM

    2013.0106 innodb数据库批量转换表引擎为MyISAM 来源:本站原创 PHP, 数据库, 系统技术 超过488名童鞋围观 1条评论  <?php //连接数据库 $host='lo ...

  3. C# WinForm开发系列 - ComboBox

    5.一个带CheckBox,分组,颜色标记等功能的下拉框  PowerComboBoxCSharp.rar 包含自动完成下拉框,字体下拉框,电脑盘符,多列下拉框,带CheckBox,树型下拉框等.代码 ...

  4. Discuz!NT 3.9.913 Beta DIY过程

    前提: 论坛的源码版本为dnt_3.9.913_sqlserver_beta.zip,以下例子都以这个版本为原型修改 dnt_3.9.913数据字典:下载 目前(2013年10月21日)官网的asp. ...

  5. bzoj4702: 装箱游戏

    Description Alice和Bob正在玩一个非常无聊的游戏以打发时间.游戏是这样的.初始的时候,有n个箱子和m个物品.箱子.物 品都是不同的.因此有nm种方法把这些物品放到箱子里.两个人轮流操 ...

  6. Winform/WPF国际化处理

    1.Winfrom国际化处理方式 ==> Winform中国际化支持可将UI页面和.cs文件分开处理 处理窗体方式如下:1.选择Form窗体设置其--Language(默认中文--Default ...

  7. datagridview 不显示行号的问题

    环境:C#,Winform 场景: 窗体上有两个tab页A.B,每个tab页上都有一个DatagridView.窗体加载后,显示tab A选项卡.序号正常显示,但点击B选项卡后,DatagridVie ...

  8. java学习笔记(二)之数据部分

    数据类型 java数据类型 基本数据类型 数值型 整型byte/short/int/long   浮点型/double/float   字符型char     布尔型boolean 取值true  f ...

  9. SQL 获取本年第几周

    根据输入的日期得出,算出是本年第几周 select datepart(week,getdate())

  10. C#属性访问器

    属性的访问器包含与获取或设置属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一:get {}set {} get 访问器get 访问器体与 ...