You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Sean Carlin <se...@gmail.com> on 2006/06/21 17:28:29 UTC

Customize the exception output

 Hi,

I've had a request from the developers at my company to modify the way in
which log4net outputs exceptions to the log.  This would need to take effect
in my EventLogAppender and AdoNetAppender.  Will I need to create my own
custom class similar to ExceptionLayout or a custom class similar to
ExceptionPatternConverter?  How can I specify this change to the
EventLogAppender?

The request is to format the exception more like the way the .NET Enterprise
Library did in .NET 1.1.:


1) Exception Information

*********************************************

Exception Type: X.WebApps.NewsRoom.WebControls.NewsSystemException

Message: Could not retrieve a list of articles from the category

Data: System.Collections.ListDictionaryInternal

TargetSite: NULL

HelpLink: NULL

Source: NULL

2) Exception Information

*********************************************

Exception Type: System.Exception

Message: An error occurred while processing the required SQL script:
D:\WebSites\X\WebAppsFolders\WebAppsCommonFiles\\scripts\core.config

Data: System.Collections.ListDictionaryInternal

TargetSite: Void ExecuteScripts(System.String, System.String[], Boolean,
Boolean)

HelpLink: NULL

Source: X.WebApps.CoreLibrary.X.X

StackTrace Information

*********************************************

at X.WebApps.CoreSystem.ExecuteScripts(String path, String[] scripts,
Boolean trapExceptions, Boolean sendAppPath)

at X.WebApps.CoreSystem.SystemInit()

at X.WebApps.CoreSystem..ctor(String application)

at
X.WebApps.NewsRoom.WebControls.NewsArticleDisplayer.GetNewsArticleAndCategory(Category&
newsCategory, Article& newsArticle)

Here is a sample of what is being output by the default format:

System.Exception: Testing application error handling from the
DevCenter/ApplicationErrorTest.aspx form. --->
System.ArrayTypeMismatchException: Oh my gosh some sort of array mismatch
occurred in this fake class! Error! Error!
at RemoteNet.Zapenza.Utility.TestClass..ctor() in
C:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Utility\TestClass.cs:line
11
at DevCenter_ApplicationErrorTest.lnkApplicationError_Click(Object sender,
EventArgs e) in
c:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Web.UI\DevCenter\ApplicationErrorTest.aspx.cs:line
24
--- End of inner exception stack trace ---
at DevCenter_ApplicationErrorTest.lnkApplicationError_Click(Object sender,
EventArgs e) in
c:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Web.UI\DevCenter\ApplicationErrorTest.aspx.cs:line
28
at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
eventArgument)
at
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(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(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Re: Customize the exception output

Posted by Sean Carlin <se...@gmail.com>.
Hi Ron,

I noticed that the Exception Information part can really vary per exception,
so I don't know how well a pattern output will work.  It would be nice to
understand what the Enterprise Library does to figure this stuff out.  I may
have to reverse engineer the code with a tool to see.  Yes, Ent Lib does
spit out "Void ExecuteScripts(System.String,System.String[], Boolean,
Boolean)."

Another variation (of many, apparently):

1) Exception Information
*********************************************
Exception Type: System.Security.SecurityException
Action: 0
PermissionType: NULL
FirstPermissionThatFailed: NULL
PermissionState: NULL
Demanded: NULL
GrantedSet: NULL
RefusedSet: NULL
DenySetInstance: NULL
PermitOnlySetInstance: NULL
FailedAssemblyInfo: NULL
Method: NULL
Zone: MyComputer
Url: NULL
Message: The current user has tried to access a secure area with an
unauthorized role.
Data: System.Collections.ListDictionaryInternal
TargetSite: Void AccessDenied(Boolean)
HelpLink: NULL
Source:



On 6/21/06, Ron Grabowski <ro...@yahoo.com> wrote:
>
> My initial thought was this:
>
> <layout type="log4net.Layout.PatternLayout">
> <![CDATA[
> %counter) Exception Information
>
> *********************************************
>
> Exception Type: %exception{type}
>
> Message: %exception{message}
>
> Data: ???
>
> TargetSite: NULL
>
> HelpLink: NULL
>
> Source: NULL
> ]]>
> </layout>
>
> I don't think the current exception pattern implementation accepts
> additional parameters.
>
> I remember seeing a counter pattern somewhere but I can't seem to find
> it now.
>
> What should go in the "Data:" part of your example?
>
> Does EntLib really show this text "Void ExecuteScripts(System.String,
> System.String[], Boolean, Boolean)" or does it just show
> "ExecuteScripts"?
>
> I would create an ExtendedPatternLayout that registers additional
> converters and have your appenders use that.
>
> Create a JIRA issue if you think some of these patterns should be part
> of PatternLayout.
>
> --- Sean Carlin <se...@gmail.com> wrote:
>
> >  Hi,
> >
> > I've had a request from the developers at my company to modify the
> > way in
> > which log4net outputs exceptions to the log.  This would need to take
> > effect
> > in my EventLogAppender and AdoNetAppender.  Will I need to create my
> > own
> > custom class similar to ExceptionLayout or a custom class similar to
> > ExceptionPatternConverter?  How can I specify this change to the
> > EventLogAppender?
> >
> > The request is to format the exception more like the way the .NET
> > Enterprise
> > Library did in .NET 1.1.:
> >
> >
> > 1) Exception Information
> >
> > *********************************************
> >
> > Exception Type: X.WebApps.NewsRoom.WebControls.NewsSystemException
> >
> > Message: Could not retrieve a list of articles from the category
> >
> > Data: System.Collections.ListDictionaryInternal
> >
> > TargetSite: NULL
> >
> > HelpLink: NULL
> >
> > Source: NULL
> >
> > 2) Exception Information
> >
> > *********************************************
> >
> > Exception Type: System.Exception
> >
> > Message: An error occurred while processing the required SQL script:
> > D:\WebSites\X\WebAppsFolders\WebAppsCommonFiles\\scripts\core.config
> >
> > Data: System.Collections.ListDictionaryInternal
> >
> > TargetSite: Void ExecuteScripts(System.String, System.String[],
> > Boolean,
> > Boolean)
> >
> > HelpLink: NULL
> >
> > Source: X.WebApps.CoreLibrary.X.X
> >
> > StackTrace Information
> >
> > *********************************************
> >
> > at X.WebApps.CoreSystem.ExecuteScripts(String path, String[] scripts,
> > Boolean trapExceptions, Boolean sendAppPath)
> >
> > at X.WebApps.CoreSystem.SystemInit()
> >
> > at X.WebApps.CoreSystem..ctor(String application)
> >
> > at
> >
>
> X.WebApps.NewsRoom.WebControls.NewsArticleDisplayer.GetNewsArticleAndCategory
> (Category&
> > newsCategory, Article& newsArticle)
> >
> > Here is a sample of what is being output by the default format:
> >
> > System.Exception: Testing application error handling from the
> > DevCenter/ApplicationErrorTest.aspx form. --->
> > System.ArrayTypeMismatchException: Oh my gosh some sort of array
> > mismatch
> > occurred in this fake class! Error! Error!
> > at RemoteNet.Zapenza.Utility.TestClass..ctor() in
> >
>
> C:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Utility\TestClass.cs:line
> > 11
> > at DevCenter_ApplicationErrorTest.lnkApplicationError_Click(Object
> > sender,
> > EventArgs e) in
> >
>
> c:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Web.UI\DevCenter\ApplicationErrorTest.aspx.cs:line
> > 24
> > --- End of inner exception stack trace ---
> > at DevCenter_ApplicationErrorTest.lnkApplicationError_Click(Object
> > sender,
> > EventArgs e) in
> >
>
> c:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Web.UI\DevCenter\ApplicationErrorTest.aspx.cs:line
> > 28
> > at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
> > at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
> > eventArgument)
> > at
> >
>
> System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
> (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(Boolean
> > includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
> >
>
>

Re: Customize the exception output

Posted by Ron Grabowski <ro...@yahoo.com>.
http://issues.apache.org/jira/browse/LOG4NET-77

--- Ron Grabowski <ro...@yahoo.com> wrote:

> I don't think the current exception pattern implementation accepts
> additional parameters.

Re: Customize the exception output

Posted by Ron Grabowski <ro...@yahoo.com>.
My initial thought was this:

<layout type="log4net.Layout.PatternLayout">
<![CDATA[
%counter) Exception Information

*********************************************

Exception Type: %exception{type}

Message: %exception{message}

Data: ???

TargetSite: NULL

HelpLink: NULL

Source: NULL
]]>
</layout>

I don't think the current exception pattern implementation accepts
additional parameters.

I remember seeing a counter pattern somewhere but I can't seem to find
it now.

What should go in the "Data:" part of your example?

Does EntLib really show this text "Void ExecuteScripts(System.String,
System.String[], Boolean, Boolean)" or does it just show
"ExecuteScripts"? 

I would create an ExtendedPatternLayout that registers additional
converters and have your appenders use that. 

Create a JIRA issue if you think some of these patterns should be part
of PatternLayout.

--- Sean Carlin <se...@gmail.com> wrote:

>  Hi,
> 
> I've had a request from the developers at my company to modify the
> way in
> which log4net outputs exceptions to the log.  This would need to take
> effect
> in my EventLogAppender and AdoNetAppender.  Will I need to create my
> own
> custom class similar to ExceptionLayout or a custom class similar to
> ExceptionPatternConverter?  How can I specify this change to the
> EventLogAppender?
> 
> The request is to format the exception more like the way the .NET
> Enterprise
> Library did in .NET 1.1.:
> 
> 
> 1) Exception Information
> 
> *********************************************
> 
> Exception Type: X.WebApps.NewsRoom.WebControls.NewsSystemException
> 
> Message: Could not retrieve a list of articles from the category
> 
> Data: System.Collections.ListDictionaryInternal
> 
> TargetSite: NULL
> 
> HelpLink: NULL
> 
> Source: NULL
> 
> 2) Exception Information
> 
> *********************************************
> 
> Exception Type: System.Exception
> 
> Message: An error occurred while processing the required SQL script:
> D:\WebSites\X\WebAppsFolders\WebAppsCommonFiles\\scripts\core.config
> 
> Data: System.Collections.ListDictionaryInternal
> 
> TargetSite: Void ExecuteScripts(System.String, System.String[],
> Boolean,
> Boolean)
> 
> HelpLink: NULL
> 
> Source: X.WebApps.CoreLibrary.X.X
> 
> StackTrace Information
> 
> *********************************************
> 
> at X.WebApps.CoreSystem.ExecuteScripts(String path, String[] scripts,
> Boolean trapExceptions, Boolean sendAppPath)
> 
> at X.WebApps.CoreSystem.SystemInit()
> 
> at X.WebApps.CoreSystem..ctor(String application)
> 
> at
>
X.WebApps.NewsRoom.WebControls.NewsArticleDisplayer.GetNewsArticleAndCategory(Category&
> newsCategory, Article& newsArticle)
> 
> Here is a sample of what is being output by the default format:
> 
> System.Exception: Testing application error handling from the
> DevCenter/ApplicationErrorTest.aspx form. --->
> System.ArrayTypeMismatchException: Oh my gosh some sort of array
> mismatch
> occurred in this fake class! Error! Error!
> at RemoteNet.Zapenza.Utility.TestClass..ctor() in
>
C:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Utility\TestClass.cs:line
> 11
> at DevCenter_ApplicationErrorTest.lnkApplicationError_Click(Object
> sender,
> EventArgs e) in
>
c:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Web.UI\DevCenter\ApplicationErrorTest.aspx.cs:line
> 24
> --- End of inner exception stack trace ---
> at DevCenter_ApplicationErrorTest.lnkApplicationError_Click(Object
> sender,
> EventArgs e) in
>
c:\Solutions\CIProjects\RemoteNet\Zapenza\Working\Source\RemoteNet.Zapenza.Web.UI\DevCenter\ApplicationErrorTest.aspx.cs:line
> 28
> at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
> at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
> eventArgument)
> at
>
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(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(Boolean
> includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
>