我试着配置log4net,将所有内容记录到控制台输出。我有一个名为Log4Net.config
的配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
</configuration>
我有我的主类(只是一个测试用例)
namespace TestLog4Net {
class Program {
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args) {
log.Info("Info");
log.Error("Error");
Console.ReadKey();
}
}
}
我将这些行添加到AssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(
ConfigFile = "Log4Net.config", Watch = true)]
但现在没有记录,有人能解释一下吗?
3条答案
按热度按时间xmakbtuz1#
当你在一个单独的配置文件中有log4net配置时,你不应该包含configuration和configSections元素。log4net应该是xml声明之后的顶级元素。
ao218c7q2#
通过代码尝试此自定义配置。为我工作,并在多个应用程序中测试。
我知道这是一个很晚的答复。但会对一些权利有用。
368yc8dk3#
我相信你在帖子中提到的文件是App.config文件的内容。App.config是WinForm应用、Console应用等多种C#项目模板的默认配置文件。因此,您应该考虑将其命名为App.config,而不是Log4Net.config。
为了有一个完整的理解,让我们通过三种可能的方式配置log4net:
1.如果我们想使用我们应用的App.config文件来保存
log4net
的设置,那么我们需要在AssemblyInfo.cs文件中添加下面提到的声明到下面一行:App.config将保存log4net设置如下:
1.在某些情况下,我们可能希望使用专用文件来保存
log4net
的设置。我们可以将其命名为例如。log4net.config或log4net.xml。在创建这样一个专用的配置文件时,我们需要确保log4net
是配置文件的 root 标签(参考文件片段):在这种情况下,我们需要在AssemblyInfo.cs文件中声明如下:在任择议定书的问题中也提到了同样的声明:
1.现在是最后一个用例。假设我们有一个自己的自定义xml文件。myCustomSettings.xml包含
log4net
设置。在这种情况下,log4net标签存在于自定义配置文件中,但它 * 不是 * 该文件的根标签(参考文件片段)在这种情况下,我们必须在运行时通过C#代码配置log4net(参考代码片段)。
在这种情况下,我们不需要AssemblyInfo.cs文件中的声明性配置。所以请确保你已经从那里删除了它: