Man, you really know your stuff.  Thanks alot!

        -----Original Message----- 
        From: Nicko Cadell [mailto:[EMAIL PROTECTED] 
        Sent: Sat 9/3/2005 6:25 AM 
        To: Log4NET User 
        Cc: 
        Subject: RE: Logging Exceptions Through a Base Page
        
        

        The ASP.NET generated page inherits from your code behind class. All 
you 
        need to do is go up one level in the inheritance hierarchy: 

        LogManager.GetLogger(Me.GetType().BaseType) 


        > -----Original Message----- 
        > From: Hart, Leo [mailto:[EMAIL PROTECTED] 
        > Sent: 02 September 2005 18:52 
        > To: Log4NET User 
        > Subject: RE: Logging Exceptions Through a Base Page 
        > 
        > Actually, I have to take that back.  This does get me closer, 
        > but not there 100%. 
        > 
        > Now what I'm getting for a log entry is: 
        > 
        >       ERROR | 2005-09-02 13:45:25, 446 | 4244 | 
        > ASP.SimpleLoggingPage1_aspx | Page_Error | An unexpected 
        > exception has occurred... 
        > 
        > So it is giving me the correct class, but because of the way 
        > ASP.NET renames its pages during JIT compilation, I get 
        > "ASP.SimpleLoggingPage1_aspx" for a logger instead of 
        > "ReferenceWebApp.Web.SimpleLoggingPage1".  I really want the 
        > latter because I'm going to need to filter on the namespace 
        > level (not the page 
        > level) in my email appenders.  This is why I was specifying: 
        >       
        >       LogManager.GetLogger(GetType(SimpleLoggingPage1)) 
        > 
        > in my pages vs: 
        > 
        >       LogManager.GetLogger(me.GetType()) 
        > 
        > which I normally do with the classes I create. 
        > 
        > Any suggestions on how to get past this ASP.NET "feature"? 
        > 
        > Thanks again, 
        > Leo 
        > 
        > 
        > 
        > 
        > -----Original Message----- 
        > From: Hart, Leo 
        > Sent: Friday, September 02, 2005 1:32 PM 
        > To: Log4NET User 
        > Subject: RE: Logging Exceptions Through a Base Page 
        > 
        > 
        > That did the trick!  Thanks a lot Nicko! 
        > 
        > -----Original Message----- 
        > From: Nicko Cadell [mailto:[EMAIL PROTECTED] 
        > Sent: Thursday, September 01, 2005 4:50 PM 
        > To: Log4NET User 
        > Subject: RE: Logging Exceptions Through a Base Page 
        > 
        > 
        > Leo, 
        > 
        > In your Page_Error don't use the m_log for the Base class, but 
instead 
        > lookup the logger for the actual instance type of Me. 
        > 
        > Not being a VB head I don't know exactly the syntax for doing 
        > that, but 
        > if I had to guess it would be: 
        > 
        > 
        > LogManager.GetLogger(Me.GetType()).Error("An unexpected 
        > exception ...") 
        > 
        > 
        > Cheers, 
        > Nicko 
        > 
        > > -----Original Message----- 
        > > From: Hart, Leo [mailto:[EMAIL PROTECTED] 
        > > Sent: 01 September 2005 20:13 
        > > To: [email protected] 
        > > Subject: Logging Exceptions Through a Base Page 
        > > 
        > > Hello, 
        > > 
        > > I suspect this will be an easy one for you experts out there, but I 
        > > haven't been able to figure it out at this point. 
        > > 
        > > I have a web application utilizing Log4Net.  I am trying to 
        > figure out 
        > 
        > > the best way to capture and log unhandled exceptions in my app.  I 
        > > have two major requirements: 
        > > 
        > > 1:  I don't want to have to write the same repetitive code 
        > in each new 
        > 
        > > page. 
        > > 2:  I want the Logger of my log entry to contain the name of 
        > > the Page that triggered the error. 
        > > 
        > > 
        > > So here's what I did: 
        > > 
        > > I have a class called ReferenceWebApp.Web.BasePage that inherits 
        > > System.Web.UI.Page: 
        > > 
        > >     #Region " Options " 
        > > 
        > >     Option Explicit On 
        > >     Option Strict On 
        > > 
        > >     #End Region 
        > > 
        > >     #Region " Imports " 
        > > 
        > >     Imports log4net 
        > >     Imports log4net.Config 
        > > 
        > >     Imports System.Web 
        > >     Imports System.Web.SessionState 
        > >     Imports System.IO 
        > > 
        > >     #End Region 
        > > 
        > >     Public Class BasePage 
        > >             Inherits System.Web.UI.Page 
        > > 
        > >     #Region " Member Variables " 
        > > 
        > >             Protected m_log As ILog = 
        > > LogManager.GetLogger(GetType(BasePage)) 
        > > 
        > >     #End Region 
        > > 
        > >             Protected Overridable Sub Page_Error(ByVal 
        > > sender As Object, ByVal e As System.EventArgs) Handles MyBase.Error 
        > >                     Me.m_log.Error("An unexpected exception has 
        > > occurred: ", Server.GetLastError) 
        > >                     Server.ClearError() 
        > >     
        > > Server.Transfer("/ReferenceWebApp/ExceptionPages/ExceptionUnha 
        > > ndled.aspx 
        > > ") 
        > >             End Sub 
        > > 
        > >     End Class 
        > > 
        > > This class acts as a base page class from which all other 
        > pages in the 
        > 
        > > application will inherit. 
        > > 
        > > I also have a class called 
        > ReferenceWebApp.Web.SimpleLoggingPage1 that 
        > 
        > > inherits from my base class: 
        > > 
        > >     #Region " Options " 
        > > 
        > >     Option Explicit On 
        > >     Option Strict On 
        > > 
        > >     #End Region 
        > > 
        > >     #Region " Imports " 
        > > 
        > >     Imports log4net 
        > > 
        > >     Imports ReferenceWebApp.Data.Dtos 
        > >     Imports ReferenceWebApp.Data.Persistence.Daos 
        > > 
        > >     #End Region 
        > > 
        > >     Namespace LoggingUsage 
        > > 
        > >             Public Class SimpleLoggingPage1 
        > >                     Inherits BasePage 
        > > 
        > >     #Region " Web Form Designer Generated Code " 
        > > 
        > >                     'This call is required by the Web Form 
Designer. 
        > >                     <System.Diagnostics.DebuggerStepThrough()> 
        > > Private Sub InitializeComponent() 
        > > 
        > >                     End Sub 
        > > 
        > >                     'NOTE: The following placeholder 
        > > declaration is required by the Web Form Designer. 
        > >                     'Do not delete or move it. 
        > >                     Private designerPlaceholderDeclaration 
        > > As System.Object 
        > > 
        > >                     Private Sub Page_Init(ByVal sender As 
        > > System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 
        > >                             'CODEGEN: This method call is 
        > > required by the Web Form Designer 
        > >                             'Do not modify it using the code 
editor. 
        > >                             InitializeComponent() 
        > >                     End Sub 
        > > 
        > >     #End Region 
        > > 
        > >                     Protected WithEvents 
        > > wc_btnCauseException As Button 
        > > 
        > >     #Region " Member Variables " 
        > > 
        > >                     Protected Shadows m_log As ILog = 
        > > LogManager.GetLogger(GetType(SimpleLoggingPage1)) 
        > > 
        > >     #End Region 
        > > 
        > >                     Private Sub Page_Load(ByVal sender As 
        > > System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        > >                             Me.m_log.Info("Info log.") 
        > > 
        > >                             Me.m_log.Debug("Debug log 1.") 
        > >                             Me.m_log.Debug("Debug log 2.") 
        > >                     End Sub 
        > > 
        > >                     Private Sub 
        > > wc_btnCauseException_Click(ByVal sender As System.Object, 
        > > ByVal e As System.EventArgs) Handles wc_btnCauseException.Click 
        > >                             Throw New Exception("Ack!  An 
        > > exception!") 
        > >                     End Sub 
        > > 
        > >             End Class 
        > > 
        > >     End Namespace 
        > > 
        > > This works almost as I want it to.  Whenever an exception occurs, 
        > > BasePage.Page_Error gets called and a log entry is made: 
        > > 
        > >     ERROR | 2005-09-01 14:52:44, 630 | 4244 | 
        > > ReferenceWebApp.Web.BasePage | Page_Error | An unexpected exception 
        > > has 
        > > occurred: 
        > >     Exception: System.Exception 
        > >     Message: Ack!  An exception! 
        > >     Source: ReferenceWebApp.Web 
        > >        at 
        > ReferenceWebApp.Web.LoggingUsage.SimpleLoggingPage1.wc_btnCaus 
        > > eException 
        > > _Click(Object sender, EventArgs e) 
        > >        at System.Web.UI.WebControls.Button.OnClick(EventArgs e) 
        > >        at 
        > > System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventH 
        > > andler.Rai 
        > > sePostBackEvent(String eventArgument) 
        > >        at 
        > > System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler 
        > > sourceControl, String eventArgument) 
        > >        at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection 
        > > postData) 
        > >        at System.Web.UI.Page.ProcessRequestMain() 
        > > 
        > > The only problem is that the logger being used is 
        > > ReferenceWebApp.Web.BasePage and not 
        > > ReferenceWebApp.Web.SimpleLoggingPage1.  I understand WHY this is 
        > > occuring, but I was hoping you guys might have some idea how to get 
        > > around this.  I want to be able to filter on page or namespace and 
        > > send certain error messages to one person and other messages to 
        > > another. 
        > > 
        > > 
        > > Thanks, 
        > > Leo Hart 
        > > 
        > 
        > 

<<winmail.dat>>

Reply via email to