log4net写入日志文件示例时一个奇怪的错误(附源码下载)

昨天园子里朋友问起:利用log4net向文件里记录日志不成功!
因为以前邀月曾经在写入SQL时费了一番周折,以为这次应该不会有问题,如法炮制即可。可以参考
log4net写入到SQL server的基本配置(downmoon)
不料试了一下,使用最新版版的log4net1.2.10 ,发现FileAppender老是不成功!
把步骤写下来:
先将下载的log4net.dll添加引用,再在(用的是Console Application)AssemblyInfo.cs中添加:

[assembly: log4net.Config.XmlConfigurator(ConfigFile  =   " log4net.config " , Watch  =   true )]

并添加独立的lognet.config文件如下:

None.gif <? xml version="1.0" ?>
None.gif
< configuration >
None.gif    
< configSections >
None.gif        
< section  name ="log4net"  type ="log4net.Config.Log4NetConfigurationSectionHandler, log4net"   />
None.gif    
</ configSections >
None.gif    
< log4net >
None.gif        
<!-- Log4net Begin by Tony  2009.09.28 -->
None.gif        
< appender  name ="LogFileAppender"  type ="log4net.Appender.FileAppender" >
None.gif            
< file  value ="D:\\Log4netDemo.txt"   />
None.gif            
< appendToFile  value ="true"   />
None.gif            
< lockingModel  type ="log4net.Appender.FileAppender+MinimalLock"   />
None.gif            
< layout  type ="log4net.Layout.PatternLayout" >
None.gif                
< conversionPattern  value ="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"   />
None.gif            
</ layout >
None.gif        
</ appender >
None.gif        
<!--  setup the root category, add the appenders and set the default level  -->
None.gif        
< root >
None.gif            
< level  value ="DEBUG" />
None.gif            
< appender-ref  ref ="LogFileAppender"   />
None.gif        
</ root >
None.gif        
<!--  specify the level for some specific categories  -->
None.gif       
<!--  <logger name="iNotes">
None.gif            <level value="WARN"/>
None.gif            <level value="INFO"/>
None.gif            <level value="DEBUG"/>
None.gif            <level value="FINE"/>
None.gif            <appender-ref ref="LogFileAppender"/>
None.gif        </logger>
None.gif        <logger name="StellaLogger">
None.gif            <level value="ALL"/>
None.gif            <appender-ref ref="LogFileAppender" />
None.gif        </logger>
None.gif
-->
None.gif    
</ log4net >
None.gif    
<!-- Log4net End -->
None.gif
None.gif
None.gif
</ configuration >
None.gif


这是参考官方配置写的,应该不会有问题。不过始终没有写成功!
测试代码如下:

None.gif
None.gif
namespace  TestLog4NetFile
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   
public class Program
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
InBlock.gif        
private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
InBlock.gif       
InBlock.gif        
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            TestlogtoFile();
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public static void TestlogtoFile()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string title = "log4net测试写入File";
InBlock.gif            
for (int i = 1; i < 3; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
try
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
int lng = int.Parse("testnumber");
ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch (System.Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
//记录错误日志
InBlock.gif
                    myLogger.Error(title + "error:" + ex.Message);
InBlock.gif                    
//记录严重错误
InBlock.gif
                    myLogger.Fatal(title + "fatal:" + ex.Message);
InBlock.gif                    
//记录一般信息
InBlock.gif
                    myLogger.Info(title + "info:" + ex.Message);
InBlock.gif                    
//记录调试信息
InBlock.gif
                    myLogger.Debug(title + "debug:", ex);
InBlock.gif                    
//记录警告信息
InBlock.gif
                    myLogger.Warn(title + "warn:", ex);
InBlock.gif
InBlock.gif                    Console.WriteLine(
"日志记录" + i + "完毕。");
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            myLogger.Error(title 
+ "Error:" + System.DateTime.Now);
InBlock.gif            Console.WriteLine(
"日志记录{X}完毕。");
InBlock.gif            Log4netDemo.TestlogtoFile();
InBlock.gif            Console.WriteLine(
"当前类调用其他类日志记录完毕。");
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
throw new Exception(title);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (System.Exception)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
//记录错误日志
InBlock.gif
                log.Error("error");
InBlock.gif                
//记录严重错误
InBlock.gif
                log.Fatal("fatal");
InBlock.gif                
//记录一般信息
InBlock.gif
                log.Info("info");
InBlock.gif                
//记录调试信息
InBlock.gif
                log.Debug("debug");
InBlock.gif                
//记录警告信息
InBlock.gif
                log.Warn("warn");
InBlock.gif                Console.WriteLine(
"当前类日志记录完毕。");
InBlock.gif                Console.ReadKey();
ExpandedSubBlockEnd.gif            }

InBlock.gif            Console.ReadKey();
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public class Log4netDemo
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
public Log4netDemo() dot.gif{ }
InBlock.gif            
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Log4netDemo));
InBlock.gif
InBlock.gif            
public static void TestlogtoFile()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
try
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
throw new Exception("log4net测试写入File");
ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch (System.Exception)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
//记录错误日志
InBlock.gif
                    log.Error("error");
InBlock.gif                    
//记录严重错误
InBlock.gif
                    log.Fatal("fatal");
InBlock.gif                    
//记录一般信息
InBlock.gif
                    log.Info("info");
InBlock.gif                    
//记录调试信息
InBlock.gif
                    log.Debug("debug");
InBlock.gif                    
//记录警告信息
InBlock.gif
                    log.Warn("warn");
InBlock.gif                    Console.WriteLine(
"日志记录完毕。");
InBlock.gif                    Console.ReadKey();
ExpandedSubBlockEnd.gif                }

InBlock.gif
ExpandedSubBlockEnd.gif            }

InBlock.gif
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif


不知道原因,后来看到有人在winform下写入成功,用的是log4net.Appender.RollingFileAppender
试着改了下配置文件,结果调试成功!修改后的配置文件如下:

None.gif <? xml version="1.0" encoding="utf-8" ?>
None.gif
< configuration >
None.gif    
< configSections >
None.gif        
< section  name ="log4net"  type ="log4net.Config.Log4NetConfigurationSectionHandler, log4net"   />
None.gif    
</ configSections >
None.gif    
< log4net >
None.gif        
< appender  name ="LogFileAppender"  type ="log4net.Appender.RollingFileAppender" >
None.gif            
< param  name ="File"  value ="d:\\Log4netDemo"   />
None.gif            
< param  name ="AppendToFile"  value ="true"   />
None.gif            
< param  name ="MaxSizeRollBackups"  value ="10"   />
None.gif            
< param  name ="StaticLogFileName"  value ="false"   />
None.gif            
< param  name ="DatePattern"  value ="yyyyMMddHH&quot;.log&quot;"    />
None.gif            
< param  name ="RollingStyle"  value ="Date"   />
None.gif            
< layout  type ="log4net.Layout.PatternLayout" >
None.gif                
<!-- <param name="conversionPattern" value="%d [%t] 日志级别:%-5p 出错类: %l - 描述:%message%newline" /> -->
None.gif                
< param  name ="ConversionPattern"  value ="%d [%t] %-5p %l  %m  %n"   />
None.gif            
</ layout >
None.gif        
</ appender >
None.gif        
< root >
None.gif            
< level  value ="All"   />
None.gif            
< appender-ref  ref ="LogFileAppender"   />
None.gif        
</ root >
None.gif    
</ log4net >
None.gif
</ configuration >


调试结果如图:
邀月

希望有高手解答一下这是为何?有时间自己再研究一下。 后来试了下,奇怪,以前的配置文件也可以写成功!难道是log4net版本的问题?下载最新源码1.2.10调试后发现成功·用release生成的dll也成功· 真的是不明白。
源码下载

转载于:https://www.cnblogs.com/downmoon/archive/2009/09/28/1575576.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值