[转]log4net使用(WinForm/WebFrom)
原来的一篇文章,今天用 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)的更多相关文章
- Log4Net的WinForm使用
一.Log4Net的WinForm使用 1.首先使用nuget 添加log4Net 到WinForm项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L - %m%n log4j.pr ...
- log4net在WinForm和ASP.net下的设置
下载log4net.dll,放到bin目录下,然后引用到工程.下面说明配置和调用方法. 1.AssemblyInfo.cs末尾添加 [assembly: log4net.Config.XmlConfi ...
- 在C#中使用LOG4NET(winform程序
http://www.csharpwin.com/csharpspace/678.shtml 1.下载log4net (Google log4net) 2.unzip log4net 3.运行VS,新 ...
- C# web程序,winform程序,控制台程序配置log4net,使用log4net
第一添加log4net.config,这里配置包括信息提示写入,错误信息写入,控制台消息展示 <?xml version="1.0" encoding="utf-8 ...
- Log4Net的WebApplication使用
一.Log4Net的WebApplication使用 1.首先使用nuget 添加log4Net 到WebApplication项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L - ...
- .Net WinForm下配置Log4Net(总结不输出原因)
最近做一个winform项目,配置了Log4net 但是总是不能输出,搜索了很多文章加上自己的探索发现自己在项目中添加的 Log4Net.config 生成时没有被复制到Debug文件夹下, 所以程序 ...
- winform 下log4net简单应用示例及“缺少log4net引用”的处理方案
1.添加应用log4net.dll 2.新增log4net.config文件,文件内容如下 <?xml version="1.0" encoding="utf-8& ...
- Winform学习之随笔一:Log4net
前提题要:因为我最近负责的Winform项目,好多都用到了这个log4net的日志功能,开发程序对数据一般都要求做到雁过留痕,所以日志对于我们程序员是不可或缺.因此我把对log4net的使用做一个记录 ...
- Log4Net的控制台,WinForm,WebApplication使用
一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...
随机推荐
- python 有关矩阵行列的存取 np.array
初始化 a = range() a = np.array(a) a = a.reshape(,) a [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 ...
- 简单说说PHP优化那些事
我们在编写程序时,总是想要使自己的程序占用资源最小,运行速度更快,代码量更少.往往我们在追求这些的同时却失去了很多东西.下面我想讲讲我对PHP优化的理解.优化的目的是花最少的代价换来最快的运行速度与最 ...
- NDK(16)Jni中GetStaticFieldID和GetMethodID 中的类型标识串
env在GetStaticFieldID和GetMethodID 时,函数参数和返回值的类型要指定类型标识串,如: jmethodID init = env->GetMethodID(clz,& ...
- Android Activity形象描述
Activity就是形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的,如果不加任何控件的话,那么就像Windows中的空白窗体一样 通过 ...
- POJ 2065 SETI(高斯消元)
题目链接:http://poj.org/problem?id=2065 题意:给出一个字符串S[1,n],字母a-z代表1到26,*代表0.我们用数组C[i]表示S[i]经过该变换得到的数字.给出一个 ...
- combination-sum-ii(熟悉下Java排序)
代码还是这一块代码,但是还是写的很慢.. 其中用到了Java对 List的排序.查了很久,发现使用 Collections.sort 很方便. 另外对结果的去重,使用了 Java的HashSet. h ...
- fzu Problem 2148 Moon Game(几何 凸四多边形 叉积)
题目:http://acm.fzu.edu.cn/problem.php?pid=2148 题意:给出n个点,判断可以组成多少个凸四边形. 思路: 因为n很小,所以直接暴力,判断是否为凸四边形的方法是 ...
- tomcat发布web service教程
这几天一直在准备找工作,自学了关于web service的一些基本的内容,也遇到了不少问题.现在就把我自己学到的知识和大家分享一下,由于是初学,所以有什么错误的地方请大家帮忙指正,感激不尽~~!! 1 ...
- CURL使用2
一:LibCurl 编程流程1.调用curl_global_init()初始化libcurl2.调用 curl_easy_init()函数得到 easy interface型指针3.调用curl_ea ...
- FFmpeg介绍及参数详细说明
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...