无法让Log4Net在我的ASP.NET网站上工作:(

问题描述:

真的很简单的问题 - >我似乎无法从我的ASP.NET应用程序中的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。

+0

为什么在Web应用程序中使用ColoredConsoleAppender? – RichardOD 2009-08-10 09:47:41

+0

因为我希望console.out被重定向到这个奇怪的调试器输出窗口.... – 2009-08-10 10:15:34

我有这个相同的问题,我认为它看着错误的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); 
+0

花花公子 - 没有ü最终记录到visual studio(调试器)OUTPUT窗口?或到一个文件? – 2009-08-10 10:09:12

+0

是的,我使用TraceAppender去到OutputDebugString工具,我在VS或http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx – kenny 2009-08-10 17:37:26

+0

哇。该sysinternals应用程序是真棒:)我爱那里的东西,这里是另一个kew的东西:)请你详细阐述详细(例如,发布您的.config文件log4net设置的屏幕截图),请吗? – 2009-08-11 10:03:32

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"/> 
+0

heh - 伙计。我从来没有说过我使用的文件系统:)再看看..... – 2009-08-10 09:46:39

+0

只要尝试这个工作示例,在它之后,你可以单独不工作的配置从未调优的安全。 – Dewfy 2009-08-10 09:55:57

+0

好的..我会给这个去...嗯。 OUTPUT窗口中出现一些错误... og4net:ERROR XmlHierarchyConfigurator:找不到名为[RollingFileAppender]的附加程序。 log4net:错误XmlHierarchyConfigurator:未找到名为[RollingFileAppender]的附加程序。 log4net的:ERROR XmlHierarchyConfigurator:找不到属性[映射]设置在[log4net.Appender.OutputDebugStringAppender]对象 log4net的:ERROR XmlHierarchyConfigurator:找不到属性[映射]设置在[log4net.Appender.OutputDebugStringAppender] – 2009-08-10 10:14:05

有至少2个可能出现的问题:

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

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

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

应用程序配置文件 可用于控制实际使用哪些收听者 。有关配置跟踪 系统的详细信息,请参阅MSDN 文档中的跟踪类 。

的事件被使用 System.Diagnostics.Trace.Write(字符串,字符串) 方法写入。事件的记录器名称为 ,作为类别 名称的值传递给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> 
+0

+ 1-正如你所说的那样有效! – RichardOD 2009-08-11 07:30:20

我添加以下行Global.asax文件,和它的作品.. !! log4net.Config.XmlConfigurator.Configure();

+1

呃......我已经在我的开场白中列出了。这就是说,我已经放弃了使用Log4Net,现在我正在使用NLog ..它是SOOOO更好的IMO :)它总是有效的(加上它更新,并且还在开发中)。 – 2010-08-07 03:37:01