(原创)Log4Net 在多层项目中的使用小记

这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录。网上有很多相关的教程,但是各有各的说法,我结合我自己这个项目的需要,首先,项目是分多层的,假如每一层都需要加入日志记录,那该怎么办呢,下面是我的一些操作步骤,记录出来和大家分享一下,不足之处希望大家多拍板砖多多指教。

这个截图是我的当前项目的层次结构,首先在Common层先添加log4net.dll的引用(仅需这里添加引用即可),然后创建一个log4net.config(见红色数字2),我当前项目的1、4、5三处的log4net.config都是同一个,至于每层到底debug输出到的文件名是要叫做”DigitalGolf2Bug.txt“呢还是叫”ServiceApiDebug.txt“呢,可以分开在相应的4或者5里面去配,有更多的层也是同理,如果对名称无特别要求的话,那我默认debug是输出到文件”debug.txt“,而error是输出到”error.txt“,而info是输出到文件”info.txt“,之后打开Common层的AssemblyInfo文件,添加红色数字3的那句代码。最后,在红色数字5的log4net.config上点右键,选择“属性”--“复制到输出目录”--“始终复制”,这样就配置就全部搞定了,只需要在你想输出日志的地方调用LogHelper里面的方法即可。

log4net.config 配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 注册log4net -->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<!-- 定义日志记录器,可多个 -->
<logger name="logerror">
<level value="ERROR" />
<appender-ref ref="LogErrorAppender" />
</logger>
<logger name="logdebug">
<level value="DEBUG" />
<appender-ref ref="LogDebugAppender" />
</logger>
<logger name="loginfo">
<level value="INFO" />
<appender-ref ref="LogInfoAppender" />
</logger>

<!-- 输出到错误信息文件 -->
<appender name="LogErrorAppender" type="log4net.Appender.FileAppender">
<param name="File" value="error.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<!-- 备份日志数目 -->
<param name="MaxFileSize" value="10240" />
<!-- 日志文件大小10M -->
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd HH:mm:ss" />
<param name="RollingStyle" value="Date" />
<!-- 创建新文件的方式,Date表示按日期创建,Size是按文件大小,etc -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n异常时间:%d%n异常级别:%-5p%n异常内容:%m%n" />
</layout>
</appender>

<!-- 输出到调试信息文件 -->
<appender name="LogDebugAppender" type="log4net.Appender.FileAppender">
<param name="File" value="debug.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<!-- 备份日志数目 -->
<param name="MaxFileSize" value="10240" />
<!-- 日志文件大小10M -->
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd HH:mm:ss" />
<param name="RollingStyle" value="Date" />
<!-- 创建新文件的方式,Date表示按日期创建,Size是按文件大小,etc -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n调试时间:%d%n调试内容:%m%n" />
</layout>
</appender>

<!-- 输出到一般信息文件 -->
<appender name="LogInfoAppender" type="log4net.Appender.FileAppender">
<param name="File" value="info.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<!-- 备份日志数目 -->
<param name="MaxFileSize" value="10240" />
<!-- 日志文件大小10M -->
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd HH:mm:ss" />
<param name="RollingStyle" value="Date" />
<!-- 创建新文件的方式,Date表示按日期创建,Size是按文件大小,etc -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n调试时间:%d%n输出内容:%m%n" />
</layout>
</appender>
</log4net>
</configuration>

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 注册log4net -->
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<!-- 定义日志记录器,可多个 -->
<logger name="logerror">
<level value="ERROR" />
<appender-ref ref="LogErrorAppender" />
</logger>
<logger name="logdebug">
<level value="DEBUG" />
<appender-ref ref="LogDebugAppender" />
</logger>
<logger name="loginfo">
<level value="INFO" />
<appender-ref ref="LogInfoAppender" />
</logger> <!-- 输出到错误信息文件 -->
<appender name="LogErrorAppender" type="log4net.Appender.FileAppender">
<param name="File" value="error.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<!-- 备份日志数目 -->
<param name="MaxFileSize" value="10240" />
<!-- 日志文件大小10M -->
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd HH:mm:ss" />
<param name="RollingStyle" value="Date" />
<!-- 创建新文件的方式,Date表示按日期创建,Size是按文件大小,etc -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n异常时间:%d%n异常级别:%-5p%n异常内容:%m%n" />
</layout>
</appender> <!-- 输出到调试信息文件 -->
<appender name="LogDebugAppender" type="log4net.Appender.FileAppender">
<param name="File" value="debug.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<!-- 备份日志数目 -->
<param name="MaxFileSize" value="10240" />
<!-- 日志文件大小10M -->
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd HH:mm:ss" />
<param name="RollingStyle" value="Date" />
<!-- 创建新文件的方式,Date表示按日期创建,Size是按文件大小,etc -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n调试时间:%d%n调试内容:%m%n" />
</layout>
</appender> <!-- 输出到一般信息文件 -->
<appender name="LogInfoAppender" type="log4net.Appender.FileAppender">
<param name="File" value="info.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<!-- 备份日志数目 -->
<param name="MaxFileSize" value="10240" />
<!-- 日志文件大小10M -->
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd HH:mm:ss" />
<param name="RollingStyle" value="Date" />
<!-- 创建新文件的方式,Date表示按日期创建,Size是按文件大小,etc -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n调试时间:%d%n输出内容:%m%n" />
</layout>
</appender>
</log4net>
</configuration>

LogHelper.cs 类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

namespace Common
{
public class LogHelper
{
private static readonly log4net.ILog log_err = log4net.LogManager.GetLogger("logerror");
private static readonly log4net.ILog log_debug = log4net.LogManager.GetLogger("logdebug");
private static readonly log4net.ILog log_info = log4net.LogManager.GetLogger("loginfo");

/// <summary>
/// 错误信息记录
/// </summary>
/// <param name="description">简单描述</param>
/// <param name="ex">错误信息</param>
public static void LogError(string description, Exception ex)
{
if (log_err.IsErrorEnabled) log_err.Error(description, ex);
}

public static void LogError(object message)
{
if (log_err.IsErrorEnabled) log_err.Error(message);
}

/// <summary>
/// 调试信息记录
/// </summary>
/// <param name="message">调试信息</param>
public static void LogDebug(object message)
{
if (log_debug.IsDebugEnabled) log_debug.Debug(message);
}

public static void LogDebug(object message, Exception ex)
{
if (log_debug.IsDebugEnabled) log_debug.Debug(message, ex);
}

/// <summary>
/// 一般信息记录
/// </summary>
/// <param name="message">一般信息</param>
public static void LogInfo(object message)
{
if (log_info.IsInfoEnabled) log_info.Info(message);
}

public static void LogInfo(object message, Exception ex)
{
if (log_info.IsInfoEnabled) log_info.Info(message, ex);
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls; namespace Common
{
public class LogHelper
{
private static readonly log4net.ILog log_err = log4net.LogManager.GetLogger("logerror");
private static readonly log4net.ILog log_debug = log4net.LogManager.GetLogger("logdebug");
private static readonly log4net.ILog log_info = log4net.LogManager.GetLogger("loginfo"); /// <summary>
/// 错误信息记录
/// </summary>
/// <param name="description">简单描述</param>
/// <param name="ex">错误信息</param>
public static void LogError(string description, Exception ex)
{
if (log_err.IsErrorEnabled) log_err.Error(description, ex);
} public static void LogError(object message)
{
if (log_err.IsErrorEnabled) log_err.Error(message);
} /// <summary>
/// 调试信息记录
/// </summary>
/// <param name="message">调试信息</param>
public static void LogDebug(object message)
{
if (log_debug.IsDebugEnabled) log_debug.Debug(message);
} public static void LogDebug(object message, Exception ex)
{
if (log_debug.IsDebugEnabled) log_debug.Debug(message, ex);
} /// <summary>
/// 一般信息记录
/// </summary>
/// <param name="message">一般信息</param>
public static void LogInfo(object message)
{
if (log_info.IsInfoEnabled) log_info.Info(message);
} public static void LogInfo(object message, Exception ex)
{
if (log_info.IsInfoEnabled) log_info.Info(message, ex);
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

namespace Common
{
public class LogHelper
{
private static readonly log4net.ILog log_err = log4net.LogManager.GetLogger("logerror");
private static readonly log4net.ILog log_debug = log4net.LogManager.GetLogger("logdebug");
private static readonly log4net.ILog log_info = log4net.LogManager.GetLogger("loginfo");

/// <summary>
/// 错误信息记录
/// </summary>
/// <param name="description">简单描述</param>
/// <param name="ex">错误信息</param>
public static void LogError(string description, Exception ex)
{
if (log_err.IsErrorEnabled) log_err.Error(description, ex);
}

public static void LogError(object message)
{
if (log_err.IsErrorEnabled) log_err.Error(message);
}

/// <summary>
/// 调试信息记录
/// </summary>
/// <param name="message">调试信息</param>
public static void LogDebug(object message)
{
if (log_debug.IsDebugEnabled) log_debug.Debug(message);
}

public static void LogDebug(object message, Exception ex)
{
if (log_debug.IsDebugEnabled) log_debug.Debug(message, ex);
}

/// <summary>
/// 一般信息记录
/// </summary>
/// <param name="message">一般信息</param>
public static void LogInfo(object message)
{
if (log_info.IsInfoEnabled) log_info.Info(message);
}

public static void LogInfo(object message, Exception ex)
{
if (log_info.IsInfoEnabled) log_info.Info(message, ex);
}
}
}

(转载)Log4Net 在多层项目中的使用小记的更多相关文章

  1. Log4Net 在多层项目中的使用小记

    原文地址:http://www.cnblogs.com/zdh8675/p/3645556.html 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用 ...

  2. (原创)Log4Net 在多层项目中的使用小记

    这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各有各的说法,我结合我自己这个项目的需要,首先,项 ...

  3. 转载:java web 项目中如何设置项目打开的默认页面

    通过博客学到的两种方法总结: 一.在web.xml文件中加入: 此时项目打开的默认页面就是loginS.html 二.在WebContent文件夹下添加index.jsp文件,此时这个index.js ...

  4. 转载 Log4j2在WEB项目中配置

    最近决定在新WEB项目中使用新的日志系统Log4j2. 官方介绍和学习文档网址为http://logging.apache.org/log4j/2.x/ 首先在WEB项目中引入以下几个jar包: ① ...

  5. 在 .Net 项目中生成Report小记

    背景 项目为WinForm + WCF 的应用,按照给定格式生成Report,显示在WinForm窗体上并可以导出为PDF和Excel文件. 分析 之前用过DevExpress For WinForm ...

  6. asp.net Web项目中使用Log4Net进行错误日志记录

      使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能 ...

  7. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  8. 在类库项目中使用log4net(RollingFileAppender)记录日志

    1.创建解决方案 2.创建类库项目 3.根据需要修改命名空间,修改(和/或)添加类到类库 4.引用log4net 5.类库项目根目录下创建leg4net配置文件,如D3CallTriggerPlugi ...

  9. 项目中使用Quartz集群分享--转载

    项目中使用Quartz集群分享--转载 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享  一:CRM对定时任务的依赖与问题  二:什么是quartz,如何使用, ...

随机推荐

  1. 【iOS发展-81】setNeedsDisplay刷新显卡,并CADisplayLink它用来模拟计时器效果

    (1)效果 (2)源码下载(假设提示没有小图片的话,自己找一个替换一下即可,看到效果即可) http://download.csdn.net/detail/wsb200514/8176339 (3)总 ...

  2. TCP/UDP简易通信

    TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...

  3. What is WCF

    几个博客前,都是关于WCF零散的知识.要了解下下面的宏,什么是WCF? WCF:Windows Communication Foundation(WCF)框架. 1.WCF体系框架 2.框架分析 2. ...

  4. SQL2000 MD5加密

    原文:SQL2000 MD5加密 /***************************************************************************** * Na ...

  5. 【网络流量-二部图最大匹配】poj3041Asteroids

    /* 这个问题将是每行一个x作为节点x,没有列y作为节点y,障碍物的坐标xy来自x至y的 边缘.图建的问题后,变成,拿得最少的点,因此,所有这些点与相邻边缘,即最小 点覆盖,与匈牙利算法来解决. -- ...

  6. springmvc4

    web项目(使用html视图解析器)   完整配置springmvc4,最终视图选择的是html,非静态文件. 最近自己配置spring的时候,遇到很多问题,由于开发环境和版本的变化导致网友们给出的建 ...

  7. Linux 时区变化

    1.查看当前的时区 date -R 2.改动当前时区 tzselect 之后会出来一个选项菜单,选择你想要的时区就OK了 3.替换系统时区文件 cp /usr/share/zoneinfo/XXX/Y ...

  8. 再谈IE的浏览器模式和文档模式

    原文:再谈IE的浏览器模式和文档模式 以前在 “IE8兼容视图(IE7 mode)与独立IE7的区别”一文中曾经涉及过浏览器模式和文档模式,但二者的区别却不甚了了,现在有了新的认识,再补充一下. 1. ...

  9. Android 2.3 版本中链接边框问题解决

    在做移动互联网开发的过程中,同样需要考虑到移动终端(如手机.平板)的不同版本浏览器兼容问题,在Android 2.3 版本的默认浏览器中有一个bug-会自动给所有链接文本在点击操作过程中加黄色或绿色边 ...

  10. Windows系统服务的编写。

    实验资源下载地址:点击打开链接 只是不知道能不能从服务向桌面进程传递消息,,就像两个桌面进程之间用Sendmessage似的..希望有知道的大神可以指点一下..不胜感激.. 因为微软在Vista之后, ...