Log4net不会登录到控制台(WinForms应用程序)

Yoa*_*oav 15 .net log4net log4net-configuration

我刚开始使用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>
Run Code Online (Sandbox Code Playgroud)

课程类:

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

将创建日志文件并在其中创建日志,但不会发生控制台日志记录.

Nic*_*oul 38

你想要的是不是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>
Run Code Online (Sandbox Code Playgroud)

  • 这应该是选定的答案! (2认同)

Den*_*nis 4

我猜 Log4net 使用传统的 Console.WriteLine(\xe2\x80\xa6) 方法将消息发送到控制台。它在 WinForms 应用程序中不起作用,因为 Console.WriteLine(\xe2\x80\xa6) 默认情况下在 WinForms 应用程序中不执行任何操作。

\n\n

尝试在应用程序开始时调用 Win32 API 函数 AllocConsole。它应该为您的 WinForms 应用程序创建一个控制台并启用 Console.WriteLine(\xe2\x80\xa6) 函数。\n您可以在此处找到显示如何调用 AllocConsole 的代码示例。\n 如何在 Windows 中打开控制台窗口应用

\n