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 > > > >
