log4net寫入日誌檔案示例時一個奇怪的錯誤

iSQlServer發表於2009-10-23
昨天園子裡朋友問起:利用log4net向檔案裡記錄日誌不成功!
因為以前邀月曾經在寫入SQL時費了一番周折,以為這次應該不會有問題,如法炮製即可。可以參考
log4net寫入到SQL server的基本配置(downmoon)
不料試了一下,使用最新版版的log4net1.2.10 ,發現FileAppender老是不成功!
把步驟寫下來:
先將下載的log4net.dll新增引用,再在(用的是Console Application)AssemblyInfo.cs中新增:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
並新增獨立的lognet.config檔案如下:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

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

        
            
            
        

--&gt
    
log4net>
    
<!--Log4net End--&gt


configuration>

這是參考官方配置寫的,應該不會有問題。不過始終沒有寫成功!
測試程式碼如下:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt
namespace TestLog4NetFile
log4net寫入日誌檔案示例時一個奇怪的錯誤
{
   
public class Program
log4net寫入日誌檔案示例時一個奇怪的錯誤    
{
        
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
        
private static log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
       
        
public static void Main(string[] args)
log4net寫入日誌檔案示例時一個奇怪的錯誤        
{
            TestlogtoFile();
        }

        
public static void TestlogtoFile()
log4net寫入日誌檔案示例時一個奇怪的錯誤        
{
            
string title = "log4net測試寫入File";
            
for (int i = 1; i < 3; i++)
log4net寫入日誌檔案示例時一個奇怪的錯誤            
{
                
try
log4net寫入日誌檔案示例時一個奇怪的錯誤                
{
                    
int lng = int.Parse("testnumber");
                }

                
catch (System.Exception ex)
log4net寫入日誌檔案示例時一個奇怪的錯誤                
{
                    
//記錄錯誤日誌
                    myLogger.Error(title + "error:" + ex.Message);
                    
//記錄嚴重錯誤
                    myLogger.Fatal(title + "fatal:" + ex.Message);
                    
//記錄一般資訊
                    myLogger.Info(title + "info:" + ex.Message);
                    
//記錄除錯資訊
                    myLogger.Debug(title + "debug:", ex);
                    
//記錄警告資訊
                    myLogger.Warn(title + "warn:", ex);

                    Console.WriteLine(
"日誌記錄" + i + "完畢。");
                }

            }

            myLogger.Error(title 
+ "Error:" + System.DateTime.Now);
            Console.WriteLine(
"日誌記錄{X}完畢。");
            Log4netDemo.TestlogtoFile();
            Console.WriteLine(
"當前類呼叫其他類日誌記錄完畢。");
            
try
log4net寫入日誌檔案示例時一個奇怪的錯誤            
{
                
throw new Exception(title);
            }

            
catch (System.Exception)
log4net寫入日誌檔案示例時一個奇怪的錯誤            
{
                
//記錄錯誤日誌
                log.Error("error");
                
//記錄嚴重錯誤
                log.Fatal("fatal");
                
//記錄一般資訊
                log.Info("info");
                
//記錄除錯資訊
                log.Debug("debug");
                
//記錄警告資訊
                log.Warn("warn");
                Console.WriteLine(
"當前類日誌記錄完畢。");
                Console.ReadKey();
            }

            Console.ReadKey();
        }

        
public class Log4netDemo
log4net寫入日誌檔案示例時一個奇怪的錯誤        
{
log4net寫入日誌檔案示例時一個奇怪的錯誤            
public Log4netDemo() { }
            
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Log4netDemo));

            
public static void TestlogtoFile()
log4net寫入日誌檔案示例時一個奇怪的錯誤            
{
                
try
log4net寫入日誌檔案示例時一個奇怪的錯誤                
{
                    
throw new Exception("log4net測試寫入File");
                }

                
catch (System.Exception)
log4net寫入日誌檔案示例時一個奇怪的錯誤                
{
                    
//記錄錯誤日誌
                    log.Error("error");
                    
//記錄嚴重錯誤
                    log.Fatal("fatal");
                    
//記錄一般資訊
                    log.Info("info");
                    
//記錄除錯資訊
                    log.Debug("debug");
                    
//記錄警告資訊
                    log.Warn("warn");
                    Console.WriteLine(
"日誌記錄完畢。");
                    Console.ReadKey();
                }


            }


        }

    }

}


不知道原因,後來看到有人在winform下寫入成功,用的是log4net.Appender.RollingFileAppender
試著改了下配置檔案,結果除錯成功!修改後的配置檔案如下:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtxml version="1.0" encoding="utf-8"?>
<configuration>
    
<configSections>
        
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    
configSections>
    
<log4net>
        
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
            
<param name="File" value="d:\\Log4netDemo" />
            
<param name="AppendToFile" value="true" />
            
<param name="MaxSizeRollBackups" value="10" />
            
<param name="StaticLogFileName" value="false" />
            
<param name="DatePattern" value="yyyyMMddHH".log""  />
            
<param name="RollingStyle" value="Date" />
            
<layout type="log4net.Layout.PatternLayout">
                
<!----&gt
                
<param name="ConversionPattern" value="%d [%t] %-5p %l  %m  %n" />
            
layout>
        
appender>
        
<root>
            
<level value="All" />
            
<appender-ref ref="LogFileAppender" />
        
root>
    
log4net>
configuration>

除錯結果如圖:
邀月

希望有高手解答一下這是為何?有時間自己再研究一下。 後來試了下,奇怪,以前的配置檔案也可以寫成功!難道是log4net版本的問題?下載最新原始碼1.2.10除錯後發現成功·用release生成的dll也成功· 真的是不明白。
原始碼下載

原文地址:http://www.cnblogs.com/downmoon/archive/2009/09/28/1575576.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-617276/,如需轉載,請註明出處,否則將追究法律責任。

相關文章