无法让Log4Net在我的ASP.NET网站上运行:(

时间:2009-08-10 09:39:41

标签: asp.net visual-studio-2008 log4net

非常简单的问题 - >我似乎无法从我的ASP.NET应用程序中的Log4Net获取任何数据。我有一个简单的ASP.NET网站,它引用了一个类库。在这个类库中,我有一些调用记录器的行。

我正在尝试在Visual Studio 2008调试输出窗口中读取log4net输出数据

这是我的代码和配置......

//Class Library project
//File: Foo.cs
public class FooService
{
    private static readonly ILog log = LogManager.GetLogger(typeof(FooService));

    public FooService()
    {
        // NOTE: To play with my L4N settings, I'll call Debug once, then Info once.

        log.Info("Starting Constructor");

        // ... snip ...

        log.Debug("Leaving Constructor");
    }
}


// ASP.NET Website project
// File: global.asax
void Application_Start(object sender, EventArgs eventArgs) 
{
    log4net.Config.XmlConfigurator.Configure();
}

// File: Whatever.aspx.cs
// A delegate method (when a user clicks a button) creates the FooService() instance.

// File: web.config
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" />

    // ....

</configSections>


<log4net>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
        <mapping>
            <level value="ERROR" />
            <foreColor value="White" />
            <backColor value="Red, HighIntensity" />
        </mapping>
        <mapping>
            <level value="DEBUG" />
            <backColor value="Green" />
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
    </appender>

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender">
        <mapping>
            <level value="ERROR" />
            <foreColor value="White" />
            <backColor value="Red, HighIntensity" />
        </mapping>
        <mapping>
            <level value="DEBUG" />
            <backColor value="Blue" />
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>


    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="App_Data\logging\log-append.txt"/>
    </appender>

    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="ALL" />
        <appender-ref ref="OutputDebugStringAppender" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="ColoredConsoleAppender" />
    </root>
    <!-- Specify the level for some specific categories -->
    <logger name="DotNetOpenAuth">
        <level value="ALL" />
    </logger>
</log4net>

欢呼任何帮助或建议......

编辑:添加了RollingLogFileAppender。

5 个答案:

答案 0 :(得分:5)

ASP.Net对文件系统访问的使用有限制,因此尝试在App_Data下明确指向目录(是否允许) 这是我的工作样本:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="App_Data\logging\log-file.txt"/>

或翻转

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="App_Data\logging\log-append.txt"/>

答案 1 :(得分:5)

我遇到了同样的问题,我认为它正在查看错误的web.config或其他内容。我终于从web.config中分离出log4net.config并将路径放到它\ inetpub \ Logs \ log4net.config并且一切都很顺利。

UDPATED ON REQUEST:从稍微复杂的版本编辑。

<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level (%logger:%line) - %message%newline" />
        </layout>
    </appender>\

    <root>
        <!--ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF-->
        <level value="ALL" />
        <appender-ref ref="TraceAppender" />
    </root>
</log4net>

它在代码中配置如下:

        var logpath = WebConfigurationManager.AppSettings["LogConfigPath"] ?? @"\Inetpub\Logs\log4net.config";
        var finfo = new System.IO.FileInfo ( logpath );
        XmlConfigurator.Configure( finfo );

答案 2 :(得分:3)

好的,找到了答案。我需要使用TraceAppender

  

应用程序配置文件   可以用来控制听众   实际上是用的。请参阅MSDN   Trace类的文档   配置跟踪的详细信息   系统

     

事件是使用   System.Diagnostics.Trace.Write(字符串,字符串)   方法。事件的记录器名称是   作为类别的值传递   写入方法的名称。

这是我的配置文件数据......

<log4net>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="ALL" />
        <appender-ref ref="TraceAppender" />
    </root>
</log4net>

答案 3 :(得分:0)

至少有两个可能存在的问题:

  • 指定文件地址的方式,请尝试使用绝对路径。
  • 进行调用的过程需要修改文件的权限。检查写入日志文件的用户帐户是否有权这样做。

要调试它我会创建并清空目录,给每个人完全控制,配置登录到该目录。然后测试它,看它是否有效,然后逐渐将安全性收紧到可接受的水平。

答案 4 :(得分:0)

我添加了以下行Global.asax文件,它的工作原理.. !! log4net.Config.XmlConfigurator.Configure();