Dot-Net
Log4net 不會登錄到控制台(WinForms 應用程序)
我剛剛開始使用 Log4Net 庫並且在配置它時遇到了問題。我不需要什麼特別的。我將它用於 Winforms 應用程序並且需要基本文件和控制台日誌記錄。為了使其盡可能簡單,我使用 App.config 進行配置,並使用從 Log4Net 項目網站獲取的預設值:App.config:
<?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>節目類:
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"); } } }創建日誌文件並在其中創建日誌,但不會發生控制台日誌記錄。
我猜 Log4net 使用傳統的 Console.WriteLine(…) 方法將消息發送到控制台。它在 WinForms 應用程序中不起作用,因為 Console.WriteLine(…) 預設情況下在 WinForms 應用程序中不執行任何操作。
嘗試在應用程序的開頭呼叫 Win32 API 函式 AllocConsole。它應該為您的 WinForms 應用程序創建一個控制台並啟用 Console.WriteLine(…) 功能。在這裡您可以找到顯示如何呼叫 AllocConsole 的程式碼範例。 如何在 Windows 應用程序中打開控制台視窗
你想要的不是
ConsoleAppender但是TraceAppender。名稱可能會令人困惑,但 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>