2015-01-16 145 views
0

我遇到了log4net的問題。我正在開發一個服務應用程序,我一直使用DLL開發一個控制檯應用程序。該dll是自包含的,控制檯應用程序只是調用該服務的啓動方法,以便我可以快速換出Windows服務進行部署。 (沒有權利在我的開發箱上安裝服務,但服務器上有完整的管理員,這是我工作時的安全噩夢,所以不要問)。Log4net適用於控制檯應用程序,但不適用於Windows服務

當在服務器上啓動控制檯應用程序時,log4net的功能就好了。當啓動Windows服務,我得到log4net的日誌這樣的錯誤:

log4net: repository [log4net-default-repository] already exists, using repository type [log4net.Repository.Hierarchy.Hierarchy] 
no configuration section <common/logging> found - suppressing logging output 

我也是用石英在該項目的另一部分,從而Common.Logging.dll夾中,但加入了常見的配置部分。記錄使用log4net不能解決問題。從我所看到的控制檯應用程序和服務之間的唯一區別是輸出類型。控制檯應用程序和服務都具有相同的packages.config,只包含log4net和僅引用log4net dll和主項目dll的相同引用。

任何幫助追蹤在哪裏看,將不勝感激。

編輯:我使用相同的app.config爲控制檯應用程序和Windows服務命名適當的program.exe.config。

+0

難道服務運行的帳號(可能是「本地服務」)沒有權限寫入日誌文件的文件夾嗎?如果您使用「本地系統」(舊的,不安全的帳戶)更改「本地服務」(默認,安全帳戶),會發生什麼情況?或者,如果刪除舊的日誌文件並允許「本地服務」下的服務創建自己的日誌文件? – Dialecticus

+0

@Dialecticus問題在於log4net甚至沒有初始化嘗試寫入日誌。來自內部log4net調試日誌的錯誤消息至少在該部分清楚。 – WindRaven

回答

0

因此,在嘗試了幾件事情後,我用標準控制檯應用程序替換了Windows服務模板項目。從這裏使用代碼https://stackoverflow.com/a/7764451/3302585

(如果複製的鏈接死亡)

public static class Program 
{ 
    #region Nested classes to support running as service 
    public const string ServiceName = "MyService"; 

    public class Service : ServiceBase 
    { 
     public Service() 
     { 
      ServiceName = Program.ServiceName; 
     } 

     protected override void OnStart(string[] args) 
     { 
      Program.Start(args); 
     } 

     protected override void OnStop() 
     { 
      Program.Stop(); 
     } 
    } 
    #endregion 

    static void Main(string[] args) 
    { 
     if (!Environment.UserInteractive) 
      // running as service 
      using (var service = new Service()) 
       ServiceBase.Run(service); 
     else 
     { 
      // running as console app 
      Start(args); 

      Console.WriteLine("Press any key to stop..."); 
      Console.ReadKey(true); 

      Stop(); 
     } 
    } 

    private static void Start(string[] args) 
    { 
     // onstart code here 
    } 

    private static void Stop() 
    { 
     // onstop code here 
    } 
} 

,並添加服務安裝程序(http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceinstaller.aspx明白髮生了什麼事情,然後複製從Windows服務模板項目初始化組件代碼對於服務安裝程序)項目現在按預期運行。

我仍然不確定發生了什麼,因爲代碼出現98%相同,但如果我不得不猜測它會對初學者來說不太明顯,以至於控制檯應用程序模板和Windows服務模板。

相關問題