我刚开始使用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");
}
}
}
创建日志文件并在其中创建日志,但不会发生控制台日志记录。
答案 0 :(得分:35)
您想要的不是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>
答案 1 :(得分:4)
我猜Log4net使用传统的Console.WriteLine(...)方法向控制台发送消息。它在WinForms应用程序中不起作用,因为默认情况下Console.WriteLine(...)在WinForms应用程序中不执行任何操作。
尝试在应用程序开头调用Win32 API函数AllocConsole。它应该为您的WinForms应用程序创建一个控制台并启用Console.WriteLine(...)函数。 在这里,您可以找到显示如何调用AllocConsole的代码示例。 How to open console window in Windows Apllication
答案 2 :(得分:1)
尝试将OutputDebugStringAppender与Sysinternals DebugView结合使用 它是在WinForms应用程序中打开控制台窗口的一个很好的替代方法
答案 3 :(得分:1)
您应该尝试将应用类型设置为控制台应用程序,而不是Windows应用程序。 然后你得到了两个世界:
1)控制台
2)winforms app
项目 - &gt;属性 - &gt;申请 - &gt; outputtype = Windows应用程序
切换到:
项目 - &gt;属性 - &gt;申请 - &gt; outputtype =控制台应用程序
在我的情况下,我使用配置的(彩色)consoleappender从log4net获取appender日志到控制台。
答案 4 :(得分:0)
我建议稍微修改配置文件。首先,我不确定您是否应该使用ConsoleAppender的页眉和页脚条目。其次,我认为你不需要param = text。我不是说这些中的任何一个都是错误的,但让我们看看我们是否可以使ConsoleAppender尽可能简单。尝试使用以下行作为LayoutPattern标记内的唯一行:
<conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newline"/>
我知道这条线是有效的,因为我过去一直使用它。如果正常运行,请告诉我。
这篇文章更详细地解释了每个部分及其作用:http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx
答案 5 :(得分:0)
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
区分大小写!!
log4net:找不到配置文件[.. \ Log4Net.config]。组态 不变。