2011-04-23 79 views
15

我剛開始使用Log4Net庫並在配置時遇到問題。我不需要任何特別的東西。我將它用於Winforms應用程序,並且需要基本的文件和控制檯日誌記錄。爲了保持儘可能簡單,我使用的是App.config中配置和使用來自log4net的項目網站採取了默認值: 的App.config:Log4net將不會登錄到控制檯(WinForms應用程序)

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="ProjectFolder" value="D:\Documents\my documents\Themis\Projects"/> 
    </appSettings> 
    <configSections> 
    <section name="log4net" 
     type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 
     <param name="File" value="ThemisLog.txt" /> 
     <param name="AppendToFile" value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="Header" value="[Header]\r\n" /> 
     <param name="Footer" value="[Footer]\r\n" /> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> 
     </layout> 
    </appender> 

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="Header" value="[Header]\r\n" /> 
     <param name="Footer" value="[Footer]\r\n" /> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogFileAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 
    </log4net> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> 

Program類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 
using log4net; 
using log4net.Config; 

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 
namespace Themis 
{ 
    static class Program 
    { 
     private static readonly ILog log = LogManager.GetLogger(typeof(Program)); 

     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      log4net.Config.XmlConfigurator.Configure(); 

      log.Debug("Enter application"); 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new OldFrmMain()); 
      log.Debug("Exit application"); 
     } 
    } 
} 

創建日誌文件並創建日誌,但不會發生控制檯日誌記錄。

回答

4

我猜Log4net使用傳統的Console.WriteLine(...)方法將消息發送到控制檯。它在WinForms應用程序中不起作用,因爲默認情況下,Console.WriteLine(...)在WinForms應用程序中不執行任何操作。

嘗試在您的應用程序開始時調用Win32 API函數AllocConsole。它應該爲您的WinForms應用程序創建一個控制檯並啓用Console.WriteLine(...)函數。 在這裏您可以找到顯示如何調用AllocConsole的代碼示例。 How to open console window in Windows Apllication

+0

Yoav,有幫助嗎?我回答了你的問題嗎? – Dennis 2011-04-25 13:19:10

+0

我可以證明控制檯記錄器在WinForms應用程序中工作。但是,它只適用於從Visual Studio開始調試時,因爲它提供了一個控制檯窗口(我相信它被稱爲Output)。 – IAmTimCorey 2011-05-03 16:25:20

0

我會建議修改你的配置文件有點。首先,我不確定您應該使用ConsoleAppender的頁眉和頁腳條目。其次,我不認爲你需要param =文字。我並不是說這兩者中的任何一個都是錯誤的,但讓我們看看我們是否可以使ConsoleAppender儘可能簡單。試試下面的線爲LayoutPattern標籤內唯一行:

<conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newline"/> 

我知道這行工作,因爲我已經在過去使用它自己。讓我知道如果運行這個工程。

下面是詳細解釋了每個部分和它做什麼的文章:http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx

+0

爲我工作的解決方案是使用log4net.Appender.TraceAppender而不是log4net.Appender。ConsoleAppender查看答覆,Nicolas Raoul – eaglei22 2016-09-19 15:41:27

32

你想要的是不是ConsoleAppenderTraceAppender

該名稱可能令人困惑,但TraceAppender在Visual Studio的「輸出」窗口中寫入。

樣品:

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d [%t] %-5p %c %m%n"/> 
    </layout> 
    </appender> 

    <root> 
    <level value="ALL"/> 
    <appender-ref ref="TraceAppender"/> 
    </root> 
</log4net> 
+0

+1解決了我遇到的問題,儘管OP的問題還不夠清楚,無法通過所選答案解決。 – RyanfaeScotland 2014-07-28 12:26:52

+2

這應該是選定的答案! – 2016-04-11 17:06:29

+1

良好的通話,更改爲log4net.Appender.TraceAppender,並像魅力一樣工作!我正在使用Asp.net MVC 4 – eaglei22 2016-09-19 15:40:42

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

是大小寫敏感的!!

log4net:找不到配置文件[.. \ Log4Net.config]。配置 不變。