原来的一篇文章,今天用 WLW 转到页面上,原文章以及附件下载地址:http://zhq.ahau.edu.cn/blog/article.asp?id=366

http://www.cnblogs.com/wenanry/archive/2008/07/04/1235198.html

http://logging.apache.org/log4net/release/config-examples.html

--------------------------------------------------------------------------------

log4net为Apache 的一个子项目,其为Java版的.Net实现,具体介绍可以参看其官方网站,另外其下载地址和详细开发文档也可以找到.

Log4net官方网站http://logging.apache.org/log4net

WinForm和WebForm中的使用方式有点雷同,基本为(1.)配置config,(2.)初始化日志系统,(3.)类文件内记录日志.

Config 文件内的配置方法可以为以下:

<configuration>

<!--日志配置部分-->

<configSections>

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>

</configSections>

<!--站点日志配置部分-->

<log4net>

<root>

<priority value="ALL"/>

<appender-ref ref="RollingFileAppender"/>

</root>

<appender name="TraceAppender" type="log4net.Appender.TraceAppender">

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>

</layout>

</appender>

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>

</layout>

</appender>

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">

<file value="log\\log.txt"/>

<appendToFile value="true"/>

<maxSizeRollBackups value="10"/>

<maximumFileSize value="2000KB"/>

<rollingStyle value="Size"/>

<staticLogFileName value="true"/>

<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>

</layout>

</appender>

</log4net>

</configuration>

以上配置信息提供了RollingFile方式的日志记录方式,并保存在log.txt文件内,当日志文件超过2000k时就会自动更名,并建立新的log.txt文件,配置文件的具体使用说明可以参看log4net的开发文档.

Log4net的基本使用方式可以参看其开发文档.这里提供一个cnblogs.com的某牛人写的一个日志操作类(AppLog.cs),这样就可以很方便使用log4net日志系统了,但缺点也就出现了(具体的缺点就是在WinForm程序内无法捕捉到追加日志的具体位置了).下面为AppLog.cs文件具体代码:

/**//// <summary>

/// 日志处理

/// </summary>

public class AppLog

{

/**//// <summary>

/// 静态类

/// </summary>

private AppLog(){}

private const string LOG_REPOSITORY = "Default"; // this should likely be set in the web config.

private static ILog m_log;

/**//// <summary>

/// 初始化日志系统

/// 在系统运行开始初始化

/// Global.asax Application_Start内

/// </summary>

public static void Init()

{

log4net.Config.XmlConfigurator.Configure();

}

/**//// <summary>

/// 写入日志

/// </summary>

/// <param name="message">日志信息</param>

/// <param name="messageType">日志类型</param>

public static void Write(string message, LogMessageType messageType)

{

DoLog(message, messageType, null, Type.GetType("System.Object"));

}

/**//// <summary>

/// 写入日志

/// </summary>

/// <param name="message">日志信息</param>

/// <param name="messageType">日志类型</param>

/// <param name="type"></param>

public static void Write(string message, LogMessageType messageType, Type type)

{

DoLog(message, messageType, null, type);

}

/**//// <summary>

/// 写入日志

/// </summary>

/// <param name="message">日志信息</param>

/// <param name="messageType">日志类型</param>

/// <param name="ex">异常</param>

public static void Write(string message, LogMessageType messageType, Exception ex)

{

DoLog(message, messageType, ex, Type.GetType("System.Object"));

}

/**//// <summary>

/// 写入日志

/// </summary>

/// <param name="message">日志信息</param>

/// <param name="messageType">日志类型</param>

/// <param name="ex">异常</param>

/// <param name="type"></param>

public static void Write(string message, LogMessageType messageType, Exception ex,

Type type)

{

DoLog(message, messageType, ex, type);

}

/**//// <summary>

/// 断言

/// </summary>

/// <param name="condition">条件</param>

/// <param name="message">日志信息</param>

public static void Assert(bool condition, string message)

{

Assert(condition, message, Type.GetType("System.Object"));

}

/**//// <summary>

/// 断言

/// </summary>

/// <param name="condition">条件</param>

/// <param name="message">日志信息</param>

/// <param name="type">日志类型</param>

public static void Assert(bool condition, string message, Type type)

{

if (condition == false)

Write(message, LogMessageType.Info);

}

/**//// <summary>

/// 保存日志

/// </summary>

/// <param name="message">日志信息</param>

/// <param name="messageType">日志类型</param>

/// <param name="ex">异常</param>

/// <param name="type">日志类型</param>

private static void DoLog(string message, LogMessageType messageType, Exception ex,

Type type)

{

m_log = LogManager.GetLogger(type);

switch (messageType)

{

case LogMessageType.Debug:

AppLog.m_log.Debug(message, ex);

break;

case LogMessageType.Info:

AppLog.m_log.Info(message, ex);

break;

case LogMessageType.Warn:

AppLog.m_log.Warn(message, ex);

break;

case LogMessageType.Error:

AppLog.m_log.Error(message, ex);

break;

case LogMessageType.Fatal:

AppLog.m_log.Fatal(message, ex);

break;

}

}

/**//// <summary>

/// 日志类型

/// </summary>

public enum LogMessageType

{

/**//// <summary>

/// 调试

/// </summary>

Debug,

/**//// <summary>

/// 信息

/// </summary>

Info,

/**//// <summary>

/// 警告

/// </summary>

Warn,

/**//// <summary>

/// 错误

/// </summary>

Error,

/**//// <summary>

/// 致命错误

/// </summary>

Fatal

}

}此类中提供日志的几种类型的一个枚举LogMessageType,将log4net中的几种日志记录方式进行了类型化抽象.记录日志时可以调用Write()方法写入日志. Write()有几个重载方法,可以实现不同的记录日志方式.例如:异常日志处理方式:

Utility.AppLog.Write("Exception:", Utility.AppLog.LogMessageType.Error, ex);一般的信息类型的日志处理

Utility.AppLog.Write("写入日志测试", Utility.AppLog.LogMessageType.Info);WinForm中使用时在Main()方法内初始化log4net日志系统.

//初始化日志使用封装类

Utility.AppLog.Init();

WebForm中使用时除config文件配置log4net相关设置部分,还需要在全局文件中(Global.asax)初始化相关日志处理类:

void Application_Start(object sender, EventArgs e)

{

// 在应用程序启动时运行的代码

//初始化日志使用封装类

TestLog4net.Utility.AppLog.Init();

TestLog4net.Utility.AppLog.Write("Web站点运行", TestLog4net.Utility.AppLog.LogMessageType.Info);

}

void Application_End(object sender, EventArgs e)

{

//  在应用程序关闭时运行的代码

TestLog4net.Utility.AppLog.Write("Web站点关闭", TestLog4net.Utility.AppLog.LogMessageType.Info);

}

为了捕捉Web站点的异常还需要在全局文件Application_Error中捕捉异常,并写入日志:

void Application_Error(object sender, EventArgs e)

{

// 在出现未处理的错误时运行的代码

Exception ex = Server.GetLastError();

if (ex != null)

{

//写入错误日志

TestLog4net.Utility.AppLog.Write("[Exception]:", TestLog4net.Utility.AppLog.LogMessageType.Error, ex);

throw ex;

}

}大概就记这么多东西,详细的使用代码可以在演示代码文件(TestLog4net)内找到.

演示代码内除了使用封装好的日志操作类记录日志外,还有使用log4net开发文档内所介绍的日志记录方式来记录日志.

演示代码项目具体目录如下:

TestLog4net.WebProject 为web使用测试项目,使用时可能要重新加载一下路径.

TestLog4net.Utility 为log4net的使用封装类AppLog.cs类.

TestLog4net.WinForm 为WinForm使用测试项目.

[转]log4net使用(WinForm/WebFrom)的更多相关文章

  1. Log4Net的WinForm使用

    一.Log4Net的WinForm使用 1.首先使用nuget 添加log4Net 到WinForm项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L - %m%n log4j.pr ...

  2. log4net在WinForm和ASP.net下的设置

    下载log4net.dll,放到bin目录下,然后引用到工程.下面说明配置和调用方法. 1.AssemblyInfo.cs末尾添加 [assembly: log4net.Config.XmlConfi ...

  3. 在C#中使用LOG4NET(winform程序

    http://www.csharpwin.com/csharpspace/678.shtml 1.下载log4net (Google log4net) 2.unzip log4net 3.运行VS,新 ...

  4. C# web程序,winform程序,控制台程序配置log4net,使用log4net

    第一添加log4net.config,这里配置包括信息提示写入,错误信息写入,控制台消息展示 <?xml version="1.0" encoding="utf-8 ...

  5. Log4Net的WebApplication使用

    一.Log4Net的WebApplication使用 1.首先使用nuget 添加log4Net 到WebApplication项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L - ...

  6. .Net WinForm下配置Log4Net(总结不输出原因)

    最近做一个winform项目,配置了Log4net 但是总是不能输出,搜索了很多文章加上自己的探索发现自己在项目中添加的 Log4Net.config 生成时没有被复制到Debug文件夹下, 所以程序 ...

  7. winform 下log4net简单应用示例及“缺少log4net引用”的处理方案

    1.添加应用log4net.dll 2.新增log4net.config文件,文件内容如下 <?xml version="1.0" encoding="utf-8& ...

  8. Winform学习之随笔一:Log4net

    前提题要:因为我最近负责的Winform项目,好多都用到了这个log4net的日志功能,开发程序对数据一般都要求做到雁过留痕,所以日志对于我们程序员是不可或缺.因此我把对log4net的使用做一个记录 ...

  9. Log4Net的控制台,WinForm,WebApplication使用

    一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...

随机推荐

  1. shell 编程基础(1)---初识shellscript

    shellscript 是linux下强大的系统管理工具,可以通过bash命令和管道命令直接在linux系统上进行编程,所写的脚本不需要编译就可以执行,对于系统管理而言十分方便. #!/bin/bas ...

  2. hadoop拾遗(五)---- mapreduce 输出到多个文件 / 文件夹

    今天要把HBase中的部分数据转移到HDFS上,想根据时间戳来自动输出到以时间戳来命名的每个文件夹下.虽然以前也做过相似工作,但有些细节还是忘记了,所以这次写个随笔记录一下. package com. ...

  3. hive环境的搭建

    hive 默认用的是derby数据库存储源数据,在这改为 mysql来存储: 1.hive和关系数据库的对照关系 hive 所要查询的数据保存在HDFS中: hive 中的数据库和表对应HDFS中的文 ...

  4. ffmpeg 2.8.1 最新版本 VS2013 可调式动态库

    ffmpeg 2.8.1 最新版本 VS2013 可调式动态库 由于大多数初学者都在想尽各种版本寻求VC编译调试ffmpeg的版本,我也曾经移植过几个版本的ffmpeg到VC上编译.: 链接所需动态库 ...

  5. python判断文件目录是否存在

    import os os.path.isfile('test.txt')  # 如果不存在就返回False os.path.exists(directory)  # 如果目录不存在就返回False o ...

  6. awk 传入外部参数

    awk 传入外部参数 num1=1.1 num2=2.2 result=$(awk -v n1=$num1 -v n2=$num2 'BEGIN{print (n2>n1)?1:0}')

  7. C++ STL之vector容器的基本操作

    注意事项:特别注意任何时候同时使用两个迭代器产生的将会是一个前闭后开的区间(具体见插入和删除的例子)特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最 ...

  8. makefile的常用规则

    一.前言 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 二.正文 1 ...

  9. sql语句记录

    清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志 BACKUP LOG 数据库名 WITH NO_LOG 收缩数据库 DBCC SHRINKDATABASE(数据 ...

  10. LA 4636 (贪心) Cubist Artwok

    题意: 一个由若干小正方体组成的图形,给出它的正视图和侧视图,求满足条件的最少小正方体的个数. 分析: 虽说是一道简单的贪心,可一直没有太好的思路. 又一次可耻地看了别人的题解. http://blo ...