说明:本程序是本人第一次运用log4net时的体会,写博客主要是给自己加深印象并可供自己随时浏览查阅。
1.什么是log4net
log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具点击打开链接。并且可以根据实际情况记载控制要输出的日志级别,包括:
- FATAL(致命错误):错误无法修复,不能继续下去;
- ERROR(错误):可以进行一些修复性的工作,但无法确定系统会正常的工作下去;
- WARN(警告):还可以把系统恢复到正常状态中,系统可以继续运行下去;
- INFO(一般信息):用来反馈系统当前状态给用户;
- DEBUG(调试信息):任何有利于系统调试时运行的状态输出,但实际运行中,一般不输出
2.怎么使用log4net
下面主要运用C#示例代码运行进行讲解。
1)运用VS2013创建Testlog的Form窗体应用程序
2)添加log4net的dll
3)创建配置文件log4net.config
4)在AssemblyInfo添加log4net的程序配置
代码:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
说明:若按照上步骤添加后,日志文件未能输出。则可在程序入口点设置代码如下,同样见效:
var path = Path.GetFullPath(@"..\..") + "\\log4net.config";
log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
5)添加log4net.config配置文件的具体设置(设置样式很多,本篇内容只是个例子)
ERROR->WARN->INFO->DEBUG->ALL :Lowest -->
a.主程序入口点
static void Main()
{
//根据实际情况设置,若在AssmblyInfo.cs中添加配置有效,则无需使用下面两行
var path = Path.GetFullPath(@"..\..") + "\\log4net.config";
log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
if (log.IsWarnEnabled)
{
log.Warn("程序开始");
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
if (log.IsWarnEnabled)
{
log.Warn("程序结束");
}
}
b.窗体加载
private void Form1_Load(object sender, EventArgs e)
{
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Form1));
if (log.IsInfoEnabled)
{
log.Info(string.Format("当前的时间是{0}", DateTime.Now.ToString()));
}
MessageBox.Show("ok!");
}
c.日志文件输出
案例的示例全部代码下载地址:
http://pan.baidu.com/s/1gfIPYRh
7) 补充
在放置log4net.config配置文件时,C#应用程序要匹配到配置文件的路径,通常的路径获取方法如下所示:
static void Main(string[] args)
{
//将123.xml文件放置在程序默认环境路径
string envPath = Environment.CurrentDirectory + "\\123.xml";
Console.WriteLine(string.Format("使用Environment.CurrentDirectory的路径:{0}", envPath));
Console.WriteLine();
//获取123.xml文件全路径
string fullPath = "获取全路径:" + Path.GetFullPath(envPath);
Console.WriteLine(fullPath);
Console.WriteLine();
//获取123.xml文件所在目录
string fileDir = "获取文件所在目录:" + Path.GetDirectoryName(envPath);
Console.WriteLine(fileDir);
Console.WriteLine();
//获取123.xml文件名称(包括后缀)
string fileName = "获取文件名称:" + Path.GetFileName(envPath);
Console.WriteLine(fileName);
Console.WriteLine();
//获取123.xml文件名称(不包括后缀)
string fileNameWithoutExtension = "获取文件名称没有后缀:" + Path.GetFileNameWithoutExtension(envPath);
Console.WriteLine(fileNameWithoutExtension);
Console.WriteLine();
//获取123.xml文件后缀
string fileExtension = "获取文件后缀:" + Path.GetExtension(envPath);
Console.WriteLine(fileExtension);
Console.WriteLine();
//获取123.xml文件所在根目录
string rootDir = "获取根目录:" + Path.GetPathRoot(envPath);
Console.WriteLine(rootDir);
Console.WriteLine();
//获取默认环境路径下的上级目录
string lastPath =Path.GetFullPath("..");
Console.WriteLine("文件上级目录:" + lastPath);
Console.WriteLine();
//获取默认环境路径下的上上目录
string lastlastPath = Path.GetFullPath(@"..\..");
Console.WriteLine("文件上级目录:" + lastlastPath);
Console.ReadKey();
}