如何使用 log4net 使用以日期为文件名输出

问题背景:项目中的WCF服务里采用Log4N用来记录异常日志,但部署后,生成的日志会出现多个累加文件,如下图:WCF是寄宿在IIS上,包含了5个SVC服务。打开日志文件,发现记录的引发异常的Thread ID都不一样,猜测是多线程读写日志文件,配置信息里指定文件的被占用后,重新建立了新的日志文件,删除日志文件也会出现警告信息:解决方法:在appender节点里添加:&param name="lockingModel"
type="log4net.Appender.FileAppender+MinimalLock" /&lockingModel 属性的详细信息可看 Log4Net SDK 中的描述。很不解的是:type中&FileAppender+MinimalLock 为何要用 '+' 来做连接符,换成'.'的时候却不行。&完整Log4Net配置信息:&??&&configuration&
&configSections&
&section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0"/&
&/configSections&
&!--日志对象根设置--&
&!--定义Level级别,若没定义,默认为Debug--&
&level value="ERROR"/&
&!--定义日志对象使用的appender,通过appeder-ref来注册--&
&appender-ref ref="LogFileAppender"/&
&!--定义具体的logger对象 通过调用LogManager.GetLogger(&wcflog&)函数,你可以检索具有该名字的日志。如果LogManager.GetLogger(&)打开的不是预定义的日志对象,则该日志对象会继承根日志对象的属性。知道了这一点,我们可以说,其实&logger&标签并不是必须的--&
&logger name="wcflog" additivity="true"&
&!--additivity 是否确认子日志对象继承父日志对象的appender列表,默认为True:确认--&
&!--注意优先级,优先级低的要放在后面--&
&level value="INFO" /&
&level value="DEBUG"/&
&appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"
&!--配置在root注册的appender-ref具体属性--&
&param name="File" value="log//"/&
&param name="StaticLogFileName" value="false" /&
&param name="DatePattern" value="yyyy-MM-dd.LOG" /&
&param name="AppendToFile" value="true"/&
&!--按照文件的大小进行变换日志文件--&
&param name="RollingStyle" value="Date" /&
&!--单个文件最大数量--&
&param name="MaximumFileSize" value="1000KB"/&
&!--保留的log文件数量 超过此数量后 自动删除之前的
&param name="MaxSizeRollBackups" value="100" /&
&!--最小锁定模型以允许多个进程可以写入同一个文件--&
&param name="lockingModel"
type="log4net.Appender.FileAppender+MinimalLock" /&
&!--type属性,定义类型--&
&layout type="log4net.Layout.PatternLayout"&
&!--定义日志会话(logger session)开始输出的文字--&
&param name="Header" value="异常开始记录 :"/&
&!--定义日志会话(logger session)结束输出的文字--&
&!--&param name="Footer" value="[Footer]\r\n"/&--&
&!--输出信息的模式: --&
&param name="ConversionPattern" value="%n时间 : %d
线程ID:[%t] %-5p 当前对象名称:%c
&!--过滤器,只需要min和max之间的级别--&
&filter type="log4net.Filter.LevelRangeFilter"&
&param name="LevelMin" value="DEBUG"/&
&param name="LevelMax" value="ERROR"/&
&/appender&
&/log4net&&/configuration&&
Log 生成日志文件名问题-CSDN论坛-CSDN-中国最大的IT技术...15条回复&-&发帖时间:&日首页- 深圳市汇智科技-深圳站建设|宝安站建设|福田... 关于Log 生成多个文件、文件名累加解决方法... 了解关于JQuery为用户控件...基础络建设与服务、智能化系统、多媒体会议系统及物联、智慧城市方案设计、...log文件名问题_博问_博客园 &/log& 会生成Log_.txt和Log_.txt.txt这样的两个文件,怎么解决?技术 C# 张韬的主页 张韬 | 菜鸟二级 | 园...log自定义日志文件名 C# log 日志文件名解决思路 log 日志文件名我想设置日志文件名按日期生成,而且还要限制文件大小,要如何设置呀.现在都要用到这样是日期,&param name=& ...log文本日志按照文件大小增加问题-CSDN论坛-CSDN-中国最...6条回复&-&发帖时间:&日Log 根据日志类别保存到不同的文件,并按照日期生成不同文件名称Log 根据日志类别保存到不同的文件,并按照日期生成不同文件名称 配置文件: 1 &configuration& 2 &configSections& 3 &!--日志记录--& 4 5 &/configSection...解决log独占日志文件的问题_C# 博文_CS程序员之窗本文将介绍如何解决log独占日志文件的问题以及log的各种输出配置(... 详情参考 log.Appender.File Appender SDK 文档。 FileAppender将日志信息...续:“改进log支持按日期产生日志文件” - today - 博客园 这样,log会根据配置文件读取相应的信息,DataPattern属性是一个日期模式字符窜,RollingFileAppender就是根据这个日期模式字符窜来计算你要以何种方式产生日期文件名...见到的最好的log说明:[摘]Log创建日志及简单扩展
17:40:28| 分类: do | 标签:log do |字号 订阅 ... &!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[...LOG中的fileAppender文件存储路径问题-技术/C#-c/c++-... log的config文件里 &file value=&rolling-log.csv& / &,我想文件的路径不再这里写死,而是通过一个变量传进来,该怎么写??有高手帮我解决吗? 我要在...Log日志文件自动按月份存放和日志独占问题的解决(..._易博客&DatePattern value=&yyyyMM\\yyyy-MM-dd&.log&&/&&!--文件名后面加上.log后缀,必须使用转义字符--& 解决log独占日志文件的问题 由于log4...动态修改log组件的日志文件名 - 玻璃*杯 - 博客园在程序运行时动态的设定log日志的文件名(例如以日期来作文件名),该怎么处理才能... log.ILog log = log.LogManager.GetLogger(&AppLogger&); 创建的log是...log使用 - 只想做好 - 博客园configSections&&log debug=&false&& &appender ... &!--写入到文件,是累加,不生成新的文件--& &... &!--文件名称--& &!--...解决log独占日志文件的问题以及 log的各种输出配..._博客园 详情参考 log.Appender.File Appender SDK 文档。 FileAppender将日志信息...写入的文件名总是为log.txt(StaticLogFileName参数指定为true);根据文件大小(...Log问题_百度知道的Log文件,如: 启动一个工具,生成的文件名:&Tool...来解决的,但是感觉这样不太好,各个工具记录的Log都... o log xml日志乱码
o 求log...Log使用总结,防止自定义的logger和root重复写入日志 ..._博客园这不是一个好的解决方法,logger只是为了单独处理一些...详情参考 log.Appender.File Appender SDK 文档 ...写入的文件名总是为 log.txt(StaticLogFileName参数...Log错误日志使用 - Traner - 博客频道 - CSDN的每一个方法都有一个重载的方法,用来支持异常处理... l ConfigFile:指出了我们的配置文件的路径及文件名... log.Config.DOMConfigurator.Configure( new ...Log使用总结,防止自定义的logger和root重复写入日..._新浪博客Log创建日志及简单扩展 - wangliqiang1014的专栏 - 博客频道 ... 定义日志的输出方式,只能作为 log 的子元素。name属性必须唯一,type属性必须... &!--按日期产生文件夹和文件名〔在日期方式与混合方式下使用〕--& &!—...如何使用log记录日志的每一个方法都有一个重载的方法,用来支持异常处理...log 能够很好的满足这些要求。它使用一个叫做... 在你自己的文件里。文件名可以是任何你想要的名字...C#中log使用方法(二) - 51CTOlog框架使用 log.Config.DOM...ConfigFile:指出了我们的配置文件的路径及文件名,... IE CSS Bug 解决实例 IE浏览器不支持很多CSS...log使用文档,配置说明 - 豆丁在你自己的文件里。文件名可以是任何你想要的名字,如AppName.exe.xyz 等. log 框架会在相对于AppDomain.CurrentDomain.BaseDirectory 属性定义的目录路径下查找...如何使用Log创建日志及简单扩展 - ll_efort的日志 - 赛迪IT... 这样就将信息同时输出到控制台和写入到文件名为“log-file.txt”的文件中,...它的GetLogger静态方法,可以获得配置文件中相应的Logger: log.ILog log = ...第一资料 地图信息wordpress多媒体不支持中文文件名及图片名乱码问题解决办法Only a test...生成ldf数据库文件转载_一个优秀的研发团队应该具备什么特征P39-习题2-6...办公自动化OA-历史任务_需求_外包-按价格由高至低排序-第..._猪八戒 ? 80帮忙破解2个word文件 如题... 已托管 4... ? 50EXCEL处理大数据处理 需求一:A列 起始IP...实现的功能如下:两个或更多excel数据,对比后生成差异...学习英文之社区,博客及源码 转载_用VC调用EXCEL简单代码(转载自越...[] log(log/)、... 件,但大多数情况我们用不着模板文件,怎么办呢?你...注意该参数值是从SQL Server启动后,就一直累加记数,...关于斑竹看看,急#如何实现C# Excel Chart 显示方式:数据系列产生... log 按日期分割log 能不能再按一天里的文件...如何解决此EXCEL数据系列难题 我希望达到这样的目的...行2的数据逐个累加,也就是“B2”=A2+B2,“C2...Log使用指南 - sema - 博客园的每一个方法都有一个重载的方法,用来支持异常处理... l ConfigFile:指出了我们的配置文件的路径及文件名... log.Config.DOMConfigurator.Configure( new ...Log使用指南_知识库_博客园的每一个方法都有一个重载的方法,用来支持异常处理... 在你自己的文件里。文件名可以是任何你想要的名字...log框架使用 log.Config.DOM...C#中log使用方法(二)来自:伊本经阁 & 日志处理Lo4配色: 字号:大...log框架使用 log.Config.DOM... ConfigFile:指出了我们的配置文件的路径及文件名,...Log最简单的使用配置_AX - 斧头帮少帮主 - 博客园--当备份文件时,为文件名加的后缀--& &!--后缀...并放在一个静态方法里方便调用 log.Config.Xml...方面的思考,这才是处理我们正在解决问题的最好办法...Log学习笔记 - Visual Studio - 拼吾爱程序人生7条回复&-&发帖时间:&日ASP调试API之Log使用指南 - 51CTO的每一个方法都有一个重载的方法,用来支持异常处理... 在你自己的文件里。文件名可以是任何你想要的名字... log.Config.DOMConfigurator.Configure( new ...& & &首先说说为什么要进行日志记录。在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。
& & &Log4net是一个很著名的开源的日志记录组件。官方网址为: ,使用Log4net能够很简单的为我们的程序添加日志记录功能。下面我们先通过一个网站例子来说明如何在.net中使用log4net。
创建日志记录步骤
& & & &当然是添加log4net.dll的引用啦,我这里提供一个log4net的dll文件,懒得去官网下的可以到这里下
& & & &在AssemblyInfo.cs文件中添加下面一句话:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]
这句话的意思是log4net会自动寻找配置文件App.config或Web.config从而获得并加载其中的配置信息。如果想log4net随时监视配置文件以便重新加载的话就要这样写按照上面一样写(winform程序ConfigFile为App.config)。
& & & 配置Web.config。
&configuration&
&configSections&
&!--注意:这里需要添加--&
&section name="log4net" type="System.Configuration.IgnoreSectionHandler"/&
&/configSections&
&connectionStrings&
&add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.User Instance=true"
providerName="System.Data.SqlClient" /&
&/connectionStrings&
&!--注意:这里需要添加--&
&!--定义输出到文件中--&
&appender name="LogFileAppender" type="log4net.Appender.FileAppender"&
&!--定义文件存放位置--&
&file value="C:\log.txt" /&
&appendToFile value="true" /&
&rollingStyle value="Date" /&
&datePattern value="yyyyMMdd-HH:mm:ss" /&
&layout type="log4net.Layout.PatternLayout"&
&!--输出格式--&
&!--样例: 13:42:32,111 [10] INFO
Log4NetDemo.MainClass [(null)] - info--&
&conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" /&
&/appender&
&!--定义输出到控制台命令行中--&
&appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /&
&/appender&
&!--定义输出到windows事件中--&
&appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /&
&/appender&
&!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb--&
&appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"&
&connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" /&
&commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" /&
&!--定义各个参数--&
&parameter&
&parameterName value="@logDate" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%date" /&
&/parameter&
&parameter&
&parameterName value="@thread" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%thread" /&
&/parameter&
&parameter&
&parameterName value="@logLevel" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%level" /&
&/parameter&
&parameter&
&parameterName value="@logger" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%logger" /&
&/parameter&
&parameter&
&parameterName value="@message" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%message" /&
&/parameter&
&/appender&
&!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。--&
&!--文件形式记录日志--&
&appender-ref ref="LogFileAppender" /&
&!--控制台控制显示日志--&
&appender-ref ref="ConsoleAppender" /&
&!--Windows事件日志--&
&!--&appender-ref ref="EventLogAppender" /&--&
&!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
&appender-ref ref="AdoNetAppender_Access" /&
&/log4net&
&system.web&
&compilation debug="true" targetFramework="4.0" /&
&httpModules&
&add name="fileUpload" type="WebApplication3.ProcessFileModule"/&
&/httpModules&
&authentication mode="Forms"&
&forms loginUrl="~/Account/Login.aspx" timeout="2880" /&
&/authentication&
&membership&
&providers&
&add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" /&
&/providers&
&/membership&
&providers&
&add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/&
&/providers&
&/profile&
&roleManager enabled="false"&
&providers&
&add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /&
&add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /&
&/providers&
&/roleManager&
&httpRuntime maxRequestLength=""/&
&/system.web&
&system.webServer&
&modules runAllManagedModulesForAllRequests="true"/&
&/system.webServer&
&/configuration&
上面这段配置取自,配置的说明上面已经注释的比较详细了。
在程序中记录信息。我们在项目下Default.aspx的Page_Load方法加入如下代码:
//获得log4net实例
ILog log = log4net.LogManager.GetLogger("LogFileAppender");
("Default.aspx下面的PageLoad方法被执行");
然后运行项目,可以发现在c:\log4netfile.txt中已经记录了一条日志信息:
记录时间: 21:26:17,729 线程ID:[4] 日志级别:INFO
出错类:LogFileAppender property:[(null)] - 错误描述:Default.aspx下面的PageLoad方法被执行
通过上面这几步我想您已经能够为程序创建一些简单日志记录功能了。下面我们再来详细说说log4net其他的一些使用方法与特点。
log4net详细说明
&&& 这里我通过问答的形式来说明log4net的一些应用。
1.log4net总共有几种记录方式,每种方式该如何配置与使用?
Log4net目前支持的输出方式包括:
1 AdoNetAppender
将日志记录到数据库中。可以采用SQL和存储过程两种方式。
2 AnsiColorTerminalAppender
在ANSI 窗口终端写下高亮度的日志事件。
3 AspNetTraceAppender
能用asp.net中Trace的方式查看记录的日志。
4 BufferingForwardingAppender
在输出到子Appenders之前先缓存日志事件。
5 ConsoleAppender
将日志输出到控制台。
6 EventLogAppender
将日志写到Windows Event Log.
7 FileAppender
将日志写到文件中。
8 LocalSyslogAppender
将日志写到local syslog service (仅用于UNIX环境下).
9 MemoryAppender
将日志存到内存缓冲区。
10 NetSendAppender
将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
11 RemoteSyslogAppender
通过UDP网络协议将日志写到Remote syslog service。
12 RemotingAppender
通过.NET Remoting将日志写到远程接收端。
13 RollingFileAppender
将日志以回滚文件的形式写到文件中。
14 SmtpAppender
将日志写到邮件中。
15 TraceAppender
将日志写到.NET trace 系统。
16 UdpAppender
将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。
可以看到目前支持的方式还是很多的,我这里调几个认为常用的做个例子。
  1.文件的方式我们上面已经讲过了,这里不再做例子了。
  2.数据库方式:
&   首先,添加数据库记录appender
&appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"&
&!--数据库连接字符串--&
&connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" /&
&commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" /&
&!--定义各个参数--&
&parameter&
&parameterName value="@logDate" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%date" /&
&/parameter&
&parameter&
&parameterName value="@thread" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%thread" /&
&/parameter&
&parameter&
&parameterName value="@logLevel" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%level" /&
&/parameter&
&parameter&
&parameterName value="@logger" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%logger" /&
&/parameter&
&parameter&
&parameterName value="@message" /&
&dbType value="String" /&
&size value="240" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%message" /&
&/parameter&
&/appender&
然后建立c:log4net.mdb 数据库,并在代码中启用数据库记录方式:
//获得log4net实例
ILog log = log4net.LogManager.GetLogger("AdoNetAppender_Access");
log.Debug("Default.aspx下面的PageLoad方法被执行");
这样日志就被记录到数据库中了。
2.log4net如何过滤我想要的日志信息,比如一个日志中只记录程序错误日志?
这个需求可以通过配置filter来实现。具体操作如下:
&&& 全局方式:
& & 这种方式会将级别应用于所有的日志输入方式。具体操作为在root节点下添加:
&!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
&!--如果没有定义LEVEL的值,则缺省为DEBUG--&
&level value="ERROR" /&
这样对于所有的日志记录方式,所有地域ERROR级别的都不会被记录了。
&&&& 单独配置级别方式:
&& & &该方式不会影响其他的日志输入方式。方法如下为,在具体的appender下添加filter:
&filter type="log4net.Filter.LevelRangeFilter"&
&param name="LevelMin" value="ERROR" /&
&param name="LevelMax" value="Fatal" /&
这种方式可以配置记录级别的方位,如果只需要记录一种,则最大和最小设置一样就行了。
3.你上面的日志输出格式我不喜欢,如何在log4net中配置我想要的日志输出格式?
log4net的输入格式定义在每个appender的layout中。具体的有以下内置可选项:
%m(message):输出的日志消息,如ILog.Debug(&)输出的一条消息 %n(new line):换行 %d(datetime):输出当前语句运行的时刻 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 %t(thread id):当前语句所在的线程ID %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN&等 %c(class):当前日志对象的名称,例如: %f(file):输出语句所在的文件名。 %l(line):输出语句所在的行号。 %数字:表示该项的最小长度,如果不够,则用空格填充,如&%-5level&表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。
通过这些东西,你可以任意组合你喜欢的输出格式内容。
4.有没有方式控制程序自动按日期记录日志信息,即每天的日志都在不同的日志文件中?
其实这种方式对应于一种特定的记录方式:RollingFileAppender。这种方式也是基于文件记录的,不过他提供更加灵活的日志记录方式。具体说来他可以按日志文件的大小或者日志记录的时间进行自动变换日志文件。
按每天不同的日期进行记录分类:
&appender name="RollingLogFileAppenderEveryMin" type="log4net.Appender.RollingFileAppender"&
&!--日志文件名开头--&
&file value="c:\logfile.txt" /&
&!--是否追加到文件--&
&appendToFile value="true" /&
&!--变换的形式为日期--&
&rollingStyle value="Date" /&
&!--日期的格式,每分钟换一个文件记录--&
&datePattern value="yyyyMMdd-HHmm" /&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /&
&/appender&
按照日志文件的大小进行变换,通过这种方式可以有效降低日志文件体积膨胀的问题:
&appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"&
&!--日志文件名--&
&file value="c:\log.txt"/&
&!--是否在文件中追加--&
&appendToFile value="true"/&
&!--按照文件的大小进行变换日志文件--&
&rollingStyle value="Size"/&
&!--最大变换数量,如果超过这个数量则从第一个文件开始复写--&
&maxSizeRollBackups value="10"/&
&!--最大文件大小,支持KB,MB,GB--&
&maximumFileSize value="100KB"/&
&!--日志文件名是否为静态--&
&staticLogFileName value="true"/&
&layout type="log4net.Layout.PatternLayout"&
&conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/&
&/appender&
最后从网上找了一段写日志的原则,感觉还是很好的:
【写日志的原则】
Ⅰ.在catch后,把异常写入日志.
Ⅱ.在调用第三方控件的开始和结束处.
Ⅲ.在连接数据库的开始结束处.
Ⅳ.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增.
Ⅴ.在自己认为很重要的逻辑处写入日志.
如果要将log方法写在类库里面,那么可以参考这篇文章
阅读(...) 评论()

我要回帖

更多关于 log4net无法输出日志 的文章

 

随机推荐