本文主要讲述如何构建封装一个日志工具类,以及在该过程中遇到的问题,

关于Log4Net的介绍,就不详细赘述了,更多详细的技术可参考http://www.cnblogs.com/kissazi2/p/3393595.html

在我完成本功能的过程中也详细拜读了他的博客,讲解的很详细。接下来我将我自己完成的Log4Net做一个展示。在本系统中,存在一个基础类库存放LogHelper工具类以及其他一些工具类,一个Web项目Zone用于调用Log,输出log信息,其他不相干的就不介绍了。其实该功能是相对来说都大同小异。项目目录如下:

一、引入log4net.dll文件

首先需要在项目中引入log4net,引用->Nuget包管理->搜索log4net->Apache Log4net->安装即可,或直接在项目中引入log4net.dll文件

二、创建log4net的工具类

创建一个类库,Commons类库,创建一个基础类LogHelper,供其他地方调用

具体代码如下:

 /// <summary>
/// 日志
/// </summary>
public class LogHelper
{
//日志级别
private const string ErrorLevel = "Error";
private const string DebugLevel = "Debug";
private const string InfoLevel = "Info";
private const string FatalLevel = "Fatal";
private const string WarningLevel = "Warn";
static LogHelper()
{
var path = AppDomain.CurrentDomain.BaseDirectory + @"log4net.config";
log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
}
#region 获得ILog
/// <summary>
/// 根据Log等级获得log
/// </summary>
/// <param name="logLevel">Log等级</param>
/// <returns></returns>
public static ILog GetLog(string logLevel)
{
var log = log4net.LogManager.GetLogger(logLevel);
return log;
}
#endregion #region Info 级别的日志
public static void Info(string message)
{
var log = GetLog(InfoLevel);
if (log.IsInfoEnabled)
{
log.Info(message);
}
}
#endregion
#region Info 级别的日志
public static void Info(string message,Exception ex)
{
var log = GetLog(InfoLevel);
if (log.IsInfoEnabled)
{
log.Info(message,ex);
}
}
#endregion #region Debug 级别的日志
public static void Debug(string message)
{
var log = GetLog(DebugLevel);
if (log.IsDebugEnabled)
{
log.Debug(message);
}
}
#endregion
#region Debug 级别的日志
public static void Debug(string message,Exception ex)
{
var log = GetLog(DebugLevel);
if (log.IsDebugEnabled)
{
log.Debug(message,ex);
}
}
#endregion #region Error 级别的日志
public static void Error(string message)
{
var log = GetLog(ErrorLevel);
if (log.IsErrorEnabled)
{
log.Error(message);
}
}
#endregion
#region Error 级别的日志
public static void Error(string message,Exception ex)
{
var log = GetLog(ErrorLevel);
if (log.IsErrorEnabled)
{
log.Error(message,ex);
}
}
#endregion #region Fatal 级别的日志
public static void Fatal(string message)
{
var log = GetLog(FatalLevel);
if (log.IsFatalEnabled)
{
log.Fatal(message);
}
}
#endregion
#region Fatal 级别的日志
public static void Fatal(string message,Exception ex)
{
var log = GetLog(FatalLevel);
if (log.IsFatalEnabled)
{
log.Fatal(message,ex);
}
}
#endregion #region Warn 级别的日志
public static void Warning(string message)
{
var log = GetLog(WarningLevel);
if (log.IsWarnEnabled)
{
log.Warn(message);
}
}
#endregion
#region Warn 级别的日志
public static void Waring(string message,Exception ex)
{
var log = GetLog(WarningLevel);
if (log.IsWarnEnabled)
{
log.Warn(message,ex);
}
}
#endregion
}

三、在该类库的AssemblyInfo.cs文件末尾添加

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

四、创建log4net.config

在调用LogHelper的项目中,创建一个log4net.config,我这里使用的配置内容如下;

<?xml version="1.0" encoding="utf-8"?>
<configuration> <configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<root>
<!--控制级别由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
<!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ALL"/>
</root>
<appender name="TestInfo" type="log4net.Appender.RollingFileAppender" >
<file value="log/Info/"/>
<appendToFile value="true"/>
<rollingStyle value="Composite" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="1MB" />
<staticLogFileName value="false" />
<DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
<appender name="TestError" type="log4net.Appender.RollingFileAppender">
<file value="log/Error/" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="1MB" />
<staticLogFileName value="false" />
<DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
<appender name="TestDebug" type="log4net.Appender.RollingFileAppender">
<file value="log/Debug/" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="1MB" />
<staticLogFileName value="false" />
<DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender> <logger name="Info">
<level value="ALL"/>
<appender-ref ref="Info" />
<appender-ref ref="TestInfo" />
</logger>
<logger name="Error">
<level value="ALL"/>
<appender-ref ref="Error" />
<appender-ref ref="TestError" />
</logger>
<logger name="Debug">
<level value="ALL"/>
<appender-ref ref="Debug" />
<appender-ref ref="TestDebug" />
</logger>
</log4net>
</configuration>

关于参数的详细配置,我就不做介绍了,可参考上文提到的博客中有详细介绍(注意,我在loghelper中虽然写了Warn和Fatal级别的日志,但在此配置中没有对这两个级别的日志做配置,故,项目不会产生这两个级别的日志)

修改log4net.config文件的属性为"始终复制"

五、在需要使用Log4Net的项目中添加该类库的引用(本系统就是Commons.dll)

在需要打印log的地方使用。修改

LogHelper.Info("产生LOG");//产生一条Info级别的Log信息

运行项目会在该项目目录下产生log/Debug/当前日期.txt、log/Error/当前日期.txt、log/Info/当前日期.txt.

在本文中红色标注的地方是可能出错的地方,如有异常一定要先检查这些

Log4Net五部曲的更多相关文章

  1. MVC4下配置log4net 五部曲

    第一步:把log4net.dll 编译成Framework 4.0 第二步:找到项目的Properties下的AssemblyInfo.在最下面添加:[assembly: log4net.Config ...

  2. python回归分析五部曲

    Python回归分析五部曲(一)—简单线性回归 https://blog.csdn.net/jacky_zhuyuanlu/article/details/78878405?ref=myread Py ...

  3. git提交代码五部曲

    From: https://jingyan.baidu.com/article/359911f5a4fe4b57fe03060d.html 正常使用git时,提交代码五部曲. 工具/原料   电脑 已 ...

  4. 基于Linux平台的Lotus Domino 8系统部署五部曲(全视频展示)

    基于Linux平台的Lotus Domino 8系统部署五部曲(全视频展示),学习就像看电影 第一部:安装部署 第二部:配置Domino 第三部:Notes8客户端配置 第四部:为Domino系统加装 ...

  5. Python回归分析五部曲(二)—多重线性回归

    基础铺垫 多重线性回归(Multiple Linear Regression) 研究一个因变量与多个自变量间线性关系的方法 在实际工作中,因变量的变化往往受几个重要因素的影响,此时就需要用2个或2个以 ...

  6. Python回归分析五部曲(一)—简单线性回归

    回归最初是遗传学中的一个名词,是由英国生物学家兼统计学家高尔顿首先提出来的,他在研究人类身高的时候发现:高个子回归人类的平均身高,而矮个子则从另一方向回归人类的平均身高: 回归分析整体逻辑 回归分析( ...

  7. Python回归分析五部曲(三)—一元非线性回归

    (一)基础铺垫 一元非线性回归分析(Univariate Nonlinear Regression) 在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条曲线近似表示,则称为一元非线性回归 ...

  8. iOS 之美:iOS Delegate 使用五步曲

    在iOS 开发中, 搞清楚Delegate 是需要花些时间的. Delegate 本来是软件架构设计的一种理念.对于像手机这样一个有限的设备,我们需要充分考虑到:内存要尽量省着用: 视图之间的关系要清 ...

  9. git使用和理解之一(不含分支)

    0.前言 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 工作区和暂存区: 我们写代码的地方就是工作区,代码写完后, ...

随机推荐

  1. yii2高级模板使用一个域名管理前后台

    yii2的高级模板分为backend和frontend,最开始用yii的时候并没怎么在意,就使用了两个域名分别解析前后台.今天无意间看见 可以使用一个域名指向前后台. 1.修改 advanced/ba ...

  2. Yii小部件

    小部件 Yii提供了一套数据小部件widgets,这些小部件可以用于显示数据. DetailView小部件用于显示一条记录数据. ListView和GridView小部件能够用于显示一个拥有分页.排序 ...

  3. 《android开发艺术探索》读书笔记(六)--Drawable

    接上篇<android开发艺术探索>读书笔记(五)--RemoteViews [BitmapDrawable] 简单的图片 <!xml version="1.0" ...

  4. SSRF漏洞总结

    SSRF漏洞:(服务端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内部系统.(正是因为它是由服务端发起的,所以它能够请求到与它相连而 ...

  5. 跨域问题jsonp

    不得不说的同源政策: 同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指域名,协议,端口相同.当一个浏览器的两个tab页 ...

  6. iBrand 产品工具包:Laravel Database Logger

    iBrand 社交新零售电商产品从2016年9月启动至今,已经趋于稳定,而且已经初步得到市场的检验,特别能抗住电商中秒杀时高并发的交易场景. 接下来我们团队会逐步开源一些正在使用的工具和解决方案,并且 ...

  7. linux HAProxy及Keepalived热备

    HAProxy 它是免费,快速且可靠的一种解决方案没,适用于那些负载特大的web站点这些站点通常又需要会话保持或七层处理提供高可用性,负载均衡及基于tcp和http应用的代理 衡量负载均衡器性能的因素 ...

  8. php学习笔记之一维数组

    数组是指可以存放多个数据的数据类型. PHP中数组是一组关键字(key)和值(values)的集合,值可以是任何一种数据类型, 一维数组的创建方式: $arr=array(2,5,6); $arr=a ...

  9. 错误代码: 1327 Undeclared variable: p_film_count

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:SELECT FOUND_ROWS() INTO p_film_count ...

  10. Linux显示登录Shell信息

    Linux显示登录Shell信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ finger -p Login Name Tty Idle Login Tim ...