首页 > Python基础教程 >
-
C#教程之Log4net - 项目使用的一个简单Demo
上一篇, 都是从别人那里拷过来的, 主要是介绍规则和说明的. 这一篇, 才是重点, 讲实际使用.
首先介绍项目中最常用的配置文件方式.
一、log4net.config 文件方式
我习惯, 把log4net的配置, 放在一个单独的配置文件中, 而不是放在 app.config或者web.config文件中, 这样做, 虽然麻烦了一点, 但是好处就是泾渭分明, 清晰明了.
1. 首先要做的, 就是在 AssemblyInfo.cs 文件中, 加一句话
[assembly:log4net.Config.DOMConfigurator(Watch=true, ConfigFile="Log4net.config")]
2. 接下来, 有两种方法, 一种是在app.config/web.config文件中加两句话, 另一种是在程序中加一句话. 那么先看第一种吧.
2.1 web.config
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <log4net configSource="log4net.config" />
与这无关的配置, 我都干掉了. 接下来, 可以看看我的 Log4net.config文件
<?xml version="1.0" encoding="utf-8" ?> <log4net> <root> <level value="ALL" /> <appender-ref ref="ErrorLogFileAppender" /> <appender-ref ref="TraceLogFileAppender" /> </root> <!--跟踪日志输出--> <appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Logs\Trace\" /> <appendToFile value="true" /> <MaxSizeRollBackups value="20" /> <RollingStyle value="Date" /> <DatePattern value="yyyy-MM-dd'.txt'" /> <StaticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" /> <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" /> <ConversionPattern value="%d [%t] %-5p %c - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="DEBUG" /> <levelMax value="INFO" /> </filter> </appender> <!--错误日志输出--> <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Logs\Error\" /> <MaxSizeRollBackups value="20" /> <StaticLogFileName value="false" /> <DatePattern value="yyyy-MM-dd'.txt'" /> <RollingStyle value="Date" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout,log4net"> <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" /> <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" /> <ConversionPattern value="%d [%t] %-5p %c - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="ERROR" /> <levelMax value="FATAL" /> </filter> </appender> </log4net>
我在controller中, 弄了一个错误点, 还是把代码贴出来吧. 清晰点
public ActionResult Index() { LogHelper.Log("trace").WriteInfo("进入HomeController/Index方法");try { int a = 0; int b = 1; var s = b / a; } catch (Exception ex) { string errorMsg = string.Format(@"后台异常信息:【{0}】, 引发异常的方法:【{1}】, 引发异常的对象:【{2}】", ex.Message, //异常信息 ex.TargetSite.ToString(), //异常方法名 ex.Source //引发异常的对象 ); LogHelper.Log("logsys").WriteError(errorMsg); } LogHelper.Log("trace").WriteInfo("离开HomeController/Index方法"); return View(list); }
接下来看一下结果:
1). 看一下生成的目录
这里使用的是日期命名的方式, 每天一个文件, 还有一种, 是使用大小限制的方式, 一个文件限制比如10M, 过了10M, 会自动重新生成一个文件.
2). 看一下日志里面记录的内容
这里的例子, 用的都是最简单的方式, 主要是介绍一下使用方法.
2.2 程序中配置的方式
public class LogHelper { static LogHelper() { XmlConfigurator.Configure(new FileInfo("Log4net.config")); } private static LogHelper _instance = null; private static ILog ILog; public static LogHelper Log(Type t) { if (_instance == null) _instance = new LogHelper(); ILog = LogManager.GetLogger(t); return _instance; } public static LogHelper Log(string sType) { if (_instance == null) _instance = new LogHelper(); ILog = LogManager.GetLogger(sType); return _instance; } /// <summary> /// 写调试信息 /// </summary> /// <param name="msg">消息</param> public void WriteDebug(string msg) { ILog.Debug(msg); } /// <summary> /// 写普通信息 /// </summary> /// <param name="msg">消息</param> public void WriteInfo(string msg) { ILog.Info(msg); } /// <summary> /// 写警告信息 /// </summary> /// <param name="msg">消息</param> public void WriteWarn(string msg) { ILog.Warn(msg); } /// <summary> /// 写错误信息 /// </summary> /// <param name="msg">消息</param> public void WriteError(string msg) { ILog.Error(msg); } /// <summary> /// 写错误信息 /// </summary> /// <param name="msg">消息</param> /// <param name="ex">错误信息</param> public void WriteError(string msg, Exception ex) { ILog.Error(msg, ex); } /// <summary> /// 写重大错误信息 /// </summary> /// <param name="msg">消息</param> public void WriteFatal(string msg) { ILog.Fatal(msg); } }
主要是 XmlConfigurator.Configure() 方法. config里面app.config/web.config文件中不加配置, 加这一句话也是可以的.
看一下结果:
这里只有Begin logging , 为啥没有 End logging呢, 这个是logger自动加的, 会在结束的时候加上去的.