Log4net不写日志文件

joh*_*n84 152 .net c# asp.net logging log4net

我使用Log4net创建了一个简单的场景,但似乎我的appender不起作用,因为消息没有添加到日志文件中.

我将以下内容添加到web.config文件中:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>        
</configSections>

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="D:\MyData\Desktop\LogFile.txt" />
            <appendToFile value="true" />
            <encoding value="utf-8" />
            <layout type="log4net.Layout.SimpleLayout" />
    </appender>


    <root>
        <level value="INFO" />
        <appender-ref ref="LogFileAppender" />
    </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

在全局ASAX文件中,我添加了:

ILog logger = LogManager.GetLogger(typeof(MvcApplication));
Run Code Online (Sandbox Code Playgroud)

并在Application_Start方法中:

logger.Info("Starting the application...");
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

And*_*son 307

你打电话吗?

log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)

在哪里让log4net读取你的配置?例如在Global.asax中:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}
Run Code Online (Sandbox Code Playgroud)

  • 有很多方法可以告诉log4net在哪里查找配置,请参阅http://logging.apache.org/log4net/release/manual/configuration.html.调用XmlConfigurator.Configure()将使log4net在<app.exe> .config或web.config中查找配置.BasicConfigurator.Configure将(根据SDK文档):"使用将写入Console.Out的ConsoleAppender初始化log4net日志记录系统." (9认同)
  • 非常感谢,我有以下几行:log4net.Config.BasicConfigurator.Configure(); 如果我使用c#配置而不是web.config配置log4net,我会调用它吗?这是"配置"-Method调用所需的任何方式,因为在许多教程中我没有找到这行代码. (4认同)
  • 我正在`AssemblyInfo`文件中进行配置。作为答案发布在下面。 (2认同)

bec*_*hbd 47

使用此FAQ页面: Apache log4net常见问题解答

大约3/4的方式告诉您如何使用应用程序跟踪启用log4net调试.这将告诉您问题所在.

基础是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

并且您在标准输出中看到了跟踪

  • 感谢这个答案,我能够确定我的“root”部分引用了错误的记录器! (2认同)

LCJ*_*LCJ 33

正如@AndreasPaulsson建议的那样,我们需要配置它.我在AssemblyInfo文件中进行配置.我在configuration file name这里指定.

// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

  • 如果我同时拥有这个和log4net.Config.XmlConfigurator.Configure(); 负载? (9认同)

kok*_*abi 30

此外,请确保为[log4net] .config选择"始终复制"选项,如下图所示:

在此输入图像描述

  • 这就是我的解决办法。我总是忘记这个设置。 (2认同)

Ode*_*ded 23

确保运行该站点的进程(帐户)具有写入输出目录的权限.

在IIS 7及更高版本中,它在应用程序池上配置,通常是AppPool标识,通常不具有写入所有目录的权限.

检查事件日志(应用程序和安全性)以查看是否抛出了任何异常.


sha*_*hay 19

插入:

 [assembly: log4net.Config.XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)

AssemblyInfo.cs文件的末尾