Dot-Net

Log4net 不會登錄到控制台(WinForms 應用程序)

  • April 16, 2018

我剛剛開始使用 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>

引用自:https://stackoverflow.com/questions/5764159