log4net的引用和配置
来源:互联网 发布:淘宝店铺怎么过户朋友 编辑:程序博客网 时间:2024/05/31 18:39
由Apache领衔开发的跨多平台的log4工具在服务器端异常捕捉和日志管理工具,log4net。
官网下载后打开src内的项目文件,编译后取得obj内的dll文件,加载到自己的项目文件夹,引用。
在根目录,添加配置文件,命名log4net.config或者其他的,config内容如下:
<?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <log4net> <logger name="loggerAX"> <!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--> <!--如果没有定义LEVEL的值,则缺省为DEBUG--> <level value="ALL" /> <appender-ref ref="SmtpAppenderAX"></appender-ref> <appender-ref ref="FileAppenderAX"></appender-ref> </logger> <appender name="SmtpAppenderAX" type="log4net.Appender.SmtpAppender"> <to value="To@domain.com"></to> <from value="From@domain.com" /> <subject value="AX'Test Log Message" /> <smtpHost value="mail.eshinfo.com" /> <username value="eshinfo" /> <password value="eshinfo" /> <bufferSize value="2048" /> <!--超长部分是否丢弃--> <lossy value="false" /> <!--输出级别在WARN和OFF之间的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ALL" /> <param name="LevelMax" value="OFF" /> </filter> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] : % newline%message%newline" /> </layout> </appender> <appender name="FileAppenderAX" type="log4net.Appender.RollingFileAppender"> <!--绝对路径--> <file value="D://AX.txt"></file> <!--相对路径,在项目的根目录下--> <!--以最后一个路径为准,所以上面的绝对路径下不会写日志--> <file value="./Log/AX.txt"></file> <!--防止多线程时不能写Log,官方说线程非安全--> <!--实际使用时,本地测试正常,部署后有不能写日志的情况--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <appendToFile value="true" /> <!--可以为:Once|Size|Date|Composite--> <!--Composite为Size和Date的组合--> <rollingStyle value="composite" /> <!--日志最大个数,都是最新的--> <!--rollingStyle节点为Date时,该节点不起作用--> <!--rollingStyle节点为Size时,只能有value个日志--> <!--rollingStyle节点为Composite时,每天有value个日志--> <maxSizeRollBackups value="10" /> <!--当备份文件时,为文件名加的后缀--> <!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP 应该是程序上的一个bug--> <!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT--> <datePattern value="_yyyy-MM-dd.TXT" /> <!--可用的单位:KB|MB|GB--> <!--不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="1KB" /> <!--置为true,当前最新日志文件名永远为file节中的名字--> <staticLogFileName value="true" /> <!--输出级别在INFO和ERROR之间的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="ERROR" /> </filter> <!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出--> <filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value="WARN" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout> </appender> </log4net></configuration>
几乎可以直接复制使用,然后在同级目录创建Log文件夹(因为使用的相对路径),然后在aspx文件的后台代码中加上如下代码:
//下面两句应该放在网站刚刚启动时加载,并放在一个静态方法里方便调用log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath ("Log4Net.config")));ILog logAX = LogManager.GetLogger("Admin"); //写日志logAX.Error("Error AX");logAX.Info("Info AX");
通过静态调用就可以写入异常或其他日志。
基于封装的角度,我们将配置文件简化,并通过类代码操作log4net库,修改log4net.config文件如下:
<?xml version="1.0" encoding="utf-8" ?><configuration> <!--Log设定--> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0" /> </configSections> <log4net> <!--日志记录器logger,可以有多个--> <logger name="fileLog"> <level value="ALL" /> <appender-ref ref="ConsoleAppender" /> <!--<appender-ref ref="LogFileAppender" />--> <appender-ref ref="RollingLogFileAppender" /> </logger> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> <!--<appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="logRaifuRFID.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender>--> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="./Log/"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="10"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n%n"/> </layout> </appender> </log4net></configuration>
通过对比差异可以发现,新的config文件可以在Log文件夹下每天以日期为名生成.log文件。
封装操作项目Common,新建Mylog类库,代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Common{ public class MyLog { private static log4net.ILog log = log4net.LogManager.GetLogger("fileLog"); public static void Debug(string message) { if (log.IsDebugEnabled) { log.Debug(message); } } public static void Debug(System.Exception ex1) { if (log.IsDebugEnabled) { log.Debug(ex1.Message.ToString() + "/r/n" + ex1.Source.ToString() + "/r/n" + ex1.TargetSite.ToString() + "/r/n" + ex1.StackTrace.ToString()); } } public static void Error(string message) { if (log.IsErrorEnabled) { log.Error(message); } } public static void Fatal(string message) { if (log.IsFatalEnabled) { log.Fatal(message); } } public static void Info(string message) { if (log.IsInfoEnabled) { log.Info(message); } } public static void Warn(string message) { if (log.IsWarnEnabled) { log.Warn(message); } } }}
这里要注意,需要在Common的AssemblyInfo.cs文件里添加一句:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
指定程序集,并将先前的log4net.dll文件引用到Common项目,然后在web项目里引用Common,如果这样子封装,那么log4net.config文件应该放在web项目的根目录。
然后在aspx的后台代码里添加测试代码:
try { Convert.ToInt32("没想好"); } catch (Exception ex1) { Common.MyLog.Debug(ex1); }
在我们的Debug方法里,参数可以是Exception类型的异常,也可以是string字符串。
封装和调用方法到此结束,实际应用看自己的项目需求,附上个人一点见解。
【写日志的原则】
1.在catch后,把异常写入日志.
2.在调用第三方控件的开始和结束处.
3.在连接数据库的开始结束处.
4.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增.
5.在自己认为很重要的逻辑处写入日志.
【注意】
发现有重要问题时最好用邮件日志,但不要指望上面的邮件配置节能发日志.
要使用能用的smtp服务器,163的只有部分用户能用.我的就不能用,很是郁闷.
要合理配置下列参数.
Ⅰ.日志文件的大小
Ⅱ.备份的日志名样式,最好时间精确到分
- log4net的引用和配置
- log4net的配置和使用
- log4net 的配置和使用方法
- NHibernate的调试技巧和Log4Net配置
- NHibernate的调试技巧和Log4Net配置
- Log4Net 配置和使用
- Log4Net 配置和使用
- Log4Net 配置和使用
- Log4Net 配置和使用
- log4net使用和配置
- Log4Net 配置和使用
- Log4Net 配置和使用
- Log4Net 配置和使用
- Log4net的配置使用
- log4net的配置
- Log4net的配置使用
- Log4net的配置
- log4net的配置使用
- Binder机制3---Native层
- oracle execute 字符串语句中单引号的处理
- Linux下ps命令详解
- HDU4968Improving the GPA(分组背包)
- 转载 IEnumerable和IEnumerator 详解
- log4net的引用和配置
- KindEditor4.1.10支持从剪切板中复制的图像直接上传(Chrome,IE11,opera)
- 文件的上传与JQGrid
- Flash视频播放器 JW PLAYER怎么在网页中运用?
- A example of NF_IP_PRE_ROUTING module(转载)
- Hadoop HDFS over HTTP 2.4.1 - Server Setup
- raid5什么意思?如何做raid5?raid5 几块硬盘?
- Binder机制4---Framework层
- ExtJS学习-------Ext.define的别名和备用名,两种定义静态方法的方法,混入属性和其他属性