2015-06-16 32 views
0

我最近將log4net軟件包添加到我的WCF Web應用程序中。現在我有幾個問題我:使用log4net軟件包

  1. 我在VS 2013包添加log4net的包安裝和 它增加了整個包。我的猜測是,log4net只是dll,我可以通過添加dll將它添加到我的項目中?

  2. 當我加入log4net的打包packages.config文件已經被添加到我的項目與此內容:

    <?xml version="1.0" encoding="utf-8"?> 
    <packages> 
        <package id="log4net" version="2.0.3" targetFramework="net45" /> 
    </packages> 
    

是什麼呢?我可以刪除它嗎?

  • 我可以用log4net的都在我的項目,而不在每個類的頂部定義它?

  • 我想添加額外的字段到消息部分。例如我想記錄下這樣的事件:

    Log.Debug(IP,「這是一個DEBUG級別的消息,通常是你的最VERBOSE級別。」);

  • 和日誌文件顯示這樣的:

    72 DEBUG 2015-06-16 08:17:41,713 [10] [(null)] [InsertDate] - from source IP(192.168.1.1) This is a DEBUG level message. Typically your most VERBOSE level. 
    
  • 我到conversionPattern還增加%line,但它不工作。每次從72開始。這怎麼解決?

  • 如何在wcf應用程序中停止並啓動應用程序?

  • +0

    如果您在整個應用程序中使用它,則需要在每個將要使用它的課程中引用該程序集。 – Brian

    回答

    4

    你居然問在1 前4個問題,你要明白,你已經使用了NuGet包管理器,這是一個很好的做法,包括使用的NuGet可用的軟件包,但不作爲手動自動放置包在適當的地方,讓您輕鬆地將此軟件包添加到解決方案的其他項目,提供版本控制等。 瞭解更多關於NuGet的信息。例如,here

    現在關於你的問題:

    首先:沒有,log4net包不僅含有log4net.dll文件。它也有log4net.xml文件。是的,您可以手動添加這兩個文件,而無需使用NuGet軟件包管理器。

    第二個:它是您的項目中的NuGet包列表。你只能刪除它,如果你不打算使用NuGet。但是,這不是一個好主意 - 讓它在那裏,它是一個輕量級的XML文件。

    第三:這是一個面向對象的問題。創建一個單獨的全球記錄,例如:

    public static class LoggingFactory 
    { 
        private static ILog _logger; 
    
        private static CreateLogger() 
        { 
         // Some log4net initialization 
         return LogManager.GetLogger("Logger"); 
        } 
    
        public static GetLogger() 
        { 
         return _logger ?? (_logger = CreateLogger()); 
        } 
    } 
    
    public class AnyClassOfYourWholeSolution 
    { 
        LoggingFactory.GetLogger().DebugFormat("{0} {1}", a, b); 
    } 
    

    第四:這是OOP的問題又來。創建一個適配器,並使用它:

    public interface ILogger 
    { 
        void Debug(string ip, string message); 
        void Info(string ip, string message); 
        void Error(string ip, string message); 
    } 
    
    public class Log4NetLogger : ILogger 
    { 
        private ILog _logger; 
    
        public Log4NetLogger() 
        { 
         // Some log4net initialization 
         _logger = LogManager.GetLogger("Logger"); 
        } 
    
        public void Debug(string ip, string message) 
        { 
         // ... 
        } 
    
        public void Info(string ip, string message) 
        { 
         // ... 
        } 
    
        public void Error(string ip, string message) 
        { 
         // ... 
        } 
    } 
    
    public static class LoggingFactory 
    { 
        private static ILogger _loggerAdapter; 
    
        private static Initialize(ILogger adapter) 
        { 
         _loggerAdapter = adapter; 
        } 
    
        public static GetLogger() 
        { 
         return _logger; 
        } 
    } 
    
    public class BeginningOfYourProject 
    { 
        // Main() or Global.asax or Program.cs etc. 
        LoggingFactory.Initialize(new Log4NetLogger()); 
    } 
    
    public class AnyClassOfYourWholeProject 
    { 
        LoggingFactory.GetLogger().Debug(ip, message); 
    } 
    

    或者你也可以提取IP來的log4net的屬性:

    // During initialization 
    log4net.ThreadContext.Properties["ip"] = ip; 
    
    // log4net Config 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%n%-5p %d %t IP: %property{ip} %m" /> 
    </layout> 
    

    這一切都取決於你的幻想。

    +0

    真棒回答,從一個從未使用Log4Net的人。非常詳細和重點。 –