原文地址: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. fiddler filter 过滤css 图片等

    找到 request header->Show only if yrl contains: REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav ...

  2. wap图片滚动特效_无css3 元素js脚本编写

    手机图片滑动切换,网上有很多这样的例子,但都借助于其他组件,让代码混乱的不行:还有就是用到css3里的 transform:translate(x,y);移动元素,不过发现在不支持css3的设备上马上 ...

  3. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { }; int main() { ...

  4. Linux环境下vsftpd参数配置

    很久之前就用过vsftpd,但总是忘了参数该如何配置,今天特地有搜索了一遍,把配置方法整理如下: (1)检查是否已安装vsftpd #rpm -qa | grep vsftpd vsftpd--.el ...

  5. HTML 编辑器

    使用 Notepad 或 TextEdit 来编写 HTML 可以使用专业的 HTML 编辑器来编辑 HTML: Adobe Dreamweaver Microsoft Expression Web ...

  6. C#Random()函数详解

    随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等.本文讨论如何在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数,并通 ...

  7. Angular学习(3)- 双向梆定

    示例代码: <!DOCTYPE html> <html ng-app="MyApp"> <head> <title>Study 3& ...

  8. 【转】Java HashMap工作原理(好文章)

    大部分Java开发者都在使用Map,特别是HashMap.HashMap是一种简单但强大的方式去存储和获取数据.但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.Ha ...

  9. Redis启动警告错误解决

    启动错误 (1)WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxc ...

  10. Cygwin之SSH服务安装过程问题

    1.折磨了最长时间的一个问题 $ ssh localhostssh: connect to host localhost port 22: Connection refused 各种google,百度 ...