65

我有这段代码和下面的配置文件:

ILog log = LogManager.GetLogger(typeof(MyClass));
log.Debug("Testing");

TestProj目录没有创建,如果我创建它,没有TestLog.txt文件,没有日志......什么都没有。

任何的想法?

谢谢,

配置文件

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

<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\\TestProj\\TestLog.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
4

5 回答 5

120

你需要调用的Configure函数XmlConfigurator

log4net.Config.XmlConfigurator.Configure();

在您的第一次登录调用之前或在您的 Global.asax 中调用,如下所示:

protected void Application_Start(Object sender, EventArgs e) {
   log4net.Config.XmlConfigurator.Configure();
}
于 2012-04-18T06:54:42.947 回答
24

另一种方法是将此行添加到 Web 应用程序的程序集信息中:

// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

类似于史莱克的。

于 2012-04-18T07:05:12.667 回答
11

1:将以下行添加到 AssemblyInfo 类中

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

2:确保你不使用.Net Framework 4 Client Profileas Target Framework(我认为这对你来说是可以的,否则它甚至不会编译)

3:确保您在程序中很早就登录。否则,在某些情况下,它不会被正确初始化(在log4net FAQ上阅读更多内容)。

因此,在 Global.asax 中的应用程序启动期间记录一些内容

public class Global : System.Web.HttpApplication
{
    private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(Global));
    protected void Application_Start(object sender, EventArgs e)
    {
        Log.Info("Startup application.");
    }
}

4:确保您有权在给定路径上创建文件和文件夹(如果文件夹本身也不存在)

5:您给定信息的其余部分看起来还不错

于 2012-04-18T07:01:40.943 回答
2

这通常是由于缺少权限。运行本地 IIS 应用程序池的 Windows 帐户可能没有写入应用程序目录的权限。您可以在某处创建一个目录,授予每个人在其中写入的权限,并将您的 log4net 配置指向该目录。如果在那里创建了一个日志文件,您可以修改所需日志目录的权限,以便应用程序池可以写入它。

另一个原因可能是未初始化的 log4net。在 winforms 应用程序中,您通常在应用程序启动时配置 log4net。在 web 应用程序中,您可以动态执行此操作(在您的日志记录组件中,检查您是否可以使用其名称创建特定的 Ilog 记录器,如果不是 -> 调用 configure())或在 global.asax.cs 中的应用程序启动时再次执行此操作.

于 2012-04-18T06:48:03.970 回答
1

我也有类似的问题。未创建日志。

请检查记录器属性名称是否应与您的 LogManager.GetLogger("name")

<logger name="Mylog">
      <level value="All"></level>
      <appender-ref ref="RollingLogFileAppender" />
    </logger>



private static readonly ILog Log = LogManager.GetLogger("Mylog");
于 2017-06-20T15:42:01.317 回答