基于Log4Net的日志系统
2020-12-13 05:36
标签:winform style class blog c code 阅读目录 不管是Web应用程序还是WinForm应用程序,Visual
Studio所带的调试功能都是足够强大,足以应付开发中的各种调试需求。但是,对于已经发布的应用,要记录错误、记载运行中的各种状态信息,就需要依靠日志系统了。 一个好的日志系统,应该具备以下的特性: 1、运行稳定。因为日志的作用就是要在系统出现各种错误、各种异常的时候输出信息,因此,它必须具有足够的鲁棒性和稳定性,在任何时候都能发挥其功能。 2、适用性广。需要用到日志功能的地方,在程序中可以说无处不在:ASPX页面,WinForm窗体,类文件、ASHX页面、线程……因此,日志系统应当在任何位置都能发挥其功能。 3、分级管理。日志应当可以按照重要性分为不同的级别,如Info、Debug、Warning、Error、Fatal等。用户可以决定输出何种级别的日志。调试时,可以输出尽可能全面的信息,如Info、Debug等级别的信息都可以输出。部署后,仅仅输出Warning以上的级别。 4、输出丰富。可以根据用户的需求,按用户指定的格式输出日志。 上述的特征,其实就是Log4Net的特点。它来源于Java平台中著名的日志组件log4j,是一个非常成熟的日志系统。它的版本更新极慢,但即使是从在.Net
1.0下发布的版本,在后面的.Net版本中都能工作正常! 由于Log4Net是开源的,所以,可以对它进行各种各样的定制修改。官方网站地址是http://logging.apache.org/log4net/ 介绍Log4Net的文章较多,因此在此不打算重复这些细节。本着最快实现的目标,争取把达到目标的必须的几个关键点点到即可。 log4net的工作原理很简单,在代码中使用log4net的相应方法(从Info到Fatal)输出日志信息,而最终究竟输出到哪里?输出哪些都由log4net.config这个配置文件来控制。因此log4net.config的重要性可谓关键。下面是一个典型的配置文件,其实有它基本就够了! Log4Net作为一个全局的基础设置,因此必须要进行一个初始化。在Web程序和窗体程序中有所不同。 1、在WinForm应用程序中,需要显示调用以下语句: 2、Web应用程序,也可以通过调用初始化语句完成: 但是,由于Web应用程序不像WinForm应用程序那样有明确的入口点,所以Web程序的初始化往往在global.ascx中的Application_Start中添加设置,如下所示: Log4Net输出信息的主要方法就是Debug()、Error()等方法,关键点在于获取Logger对象。有多种方法可以获取Logger对象,经过实验,使用下面的方法可以适用于普通类和静态类的输出: 在WinForm中进行简单的测试: 其中SClass中的StaticFunc是一个简单静态方法,其中有日志信息输出。最后的日志如下: 而在Web应用程序中,也可以进行类似的测试,证明适应性还是不错的。 经过各种测试,终于找到一些通用性强的方法,为防止以后每次都得回来复制粘贴,还是把它封装一下比较好,在CommonCode中,用Logger封装了日志的相关功能,如下: Web的调用还得修改Global.ascx,但WinForm中可以通过WinInit进行初始化了。至于输出信息,则可以通过 的形式进行输出。 在CommonCode中,Log4Net是一个通用的输出机制,各种应用的日志输出都需要用它,所以,大多数情况下,需要把Log4Net.dll和CommonCode.dll放在一起。 Log4net的输出非常强大,以下是我常用的一些配置: 简单说明如下: 基于Log4Net的日志系统,搜素材,soscw.com 基于Log4Net的日志系统 标签:winform style class blog c code 原文地址:http://www.cnblogs.com/jetz/p/3737435.html
日志系统应具备的特性
Log4Net
配置文件:log4net.config
初始化
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(System.Windows.Forms.Application.StartupPath + "\\log4net.config"));
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath("~")+"\\log4net.config"));
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("~")+"\\log4net.config"));
}
所以,对Web程序,只要添加global.ascx,在Application_Start中添加代码即可。
输出信息
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).Info("ColumnClick");
private void button1_Click(object sender, EventArgs e)
{
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).Debug("普通类中的信息");
SClass.StaticFunc();
for (int i = 0; i
对Log4Net的封装
public class Logger
{
public static void Init(string ConfigFile)
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(ConfigFile));
}
public static void WinFormInit() //WinForm程序的初始化
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(System.Windows.Forms.Application.StartupPath + "\\log4net.config"));
}
public static void WebInit() //WinForm程序的初始化
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath("~")+"\\log4net.config"));
}
public static void Debug(String info)
{
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).Debug(info);
}
public static void Info(String info)
{
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).Info(info);
}
public static void Error(String info)
{
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).Error(info);
}
public static void Fatal(String info)
{
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).Fatal(info);
}
}
CommonCode.Logger.Debug(string)
log4net.config复杂配置