当前位置:
首页 > 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自动加的, 会在结束的时候加上去的.
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式