You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by jeczmien <je...@podgorska.ddns.info> on 2012/05/11 13:21:03 UTC

Joining tapestry exception handling

I need advice how to execute my code during tapestry exception handling.


Current:
1. Something wrong has happen and tapestry shows exception page 
2. error is logged in container' log

My use case:
1. Something wrong has happen and tapestry shows exception page 
2. error is logged in container' log
3. my method sends email notification to system operator containing
exception log, or eventually exception page generated when application
PRODUCTION_MODE is false.

is there any contributeXXXX method for this?

--
View this message in context: http://tapestry.1045711.n5.nabble.com/Joining-tapestry-exception-handling-tp5702797.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Joining tapestry exception handling

Posted by Felix Gonschorek <fe...@netzgut.net>.
you have to pay attention not to let your log4j smtp logger append in
"sync" mode - your system will stall, until the logging message has been
sent (which could be a few seconds, depending how you send your mail).
your have to use an async logger. this is an example configuration i use
in my system. only "error" level logging events will be sent by mail,
all other stuff is logged to a regular file:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN"

"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="file" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="application.log" />
        <param name="Append" value="true" />
        <param name="MaxBackupIndex" value="10" />
        <param name="MaxFileSize" value="100MB" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}:
application %p [%c] -> %m (%X{requestedUrl})%n" />
        </layout>
    </appender>

    <appender name="mail" class="org.apache.log4j.net.SMTPAppender">
        <param name="BufferSize" value="1" />
        <param name="SMTPHost" value="smtphost" />
        <param name="SMTPUsername" value="smtpuser" />
        <param name="SMTPPassword" value="password" />
        <param name="From" value="mail@sender.com" />
        <param name="To" value="mail@receipient.com" />
        <param name="Subject" value="Logging message application" />
        <param name="threshold" value="error" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}:
application %p [%c] -> %m (%X{requestedUrl})%n" />
        </layout>
    </appender>

    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
        <param name="BufferSize" value="100" />
        <appender-ref ref="mail" />
    </appender>

    <logger name="de.my.application">
        <level value="DEBUG" />
    </logger>

    <logger name="com.other.application">
        <level value="DEBUG" />
    </logger>

    <logger name="some.third.party.lib">
        <level value="WARN"></level>
    </logger>

    <root>
        <priority value="warn" />
        <appender-ref ref="ASYNC" />
        <appender-ref ref="file" />
    </root>

</log4j:configuration>


%X{requestedUrl} is a MDC log4j variable and i store the requested URL
in it. it helps a lot when you have to debug requests (often crawlers
and bots send requests with invalid characters in the url - this way you
can easily detect this). to store the requested url in the MDC i
implemented a wrapper around the TapestryFilter which stores the
requested url before the filtered request get's handled by tapestry.


    private static final Logger log       =
LoggerFactory.getLogger(MyFilter.class);

    private TapestryFilter      tapFilter = null;

    @Override
    public final void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain) throws IOException,

                           ServletException {
        try {
            MDC.put("requestedUrl", this.getRequestedUrl(request));
            if (this.tapFilter != null) {
                this.tapFilter.doFilter(request, response, chain);
            }
            else {
                chain.doFilter(request, response);
            }
        }
        finally {
            MDC.clear();
        }
    }

    private String getRequestedUrl(ServletRequest request) {
        try {
            StringBuilder buffer = new StringBuilder();
            if (request instanceof HttpServletRequest) {
                HttpServletRequest httpServletRequest =
(HttpServletRequest) request;
                buffer.append(httpServletRequest.getRequestURL());
            }
            return buffer.toString();
        }
        catch (Exception exception) {
            return null;
        }
    }

    @Override
    public final void destroy() {
        if (this.tapFilter != null) {
            this.tapFilter.destroy();
        }
    }

    @Override
    public final void init(FilterConfig filterConfig) throws
ServletException {
        log.debug("Initializing Tapestry filter");
        this.tapFilter = new TapestryFilter();
        this.tapFilter.init(filterConfig);
        log.debug("Tapestry Filter initialized!");
    }




Am 12.05.2012 14:51, schrieb Bob Harner:
> You couldd also have the logging system send the emails. Log4j can handle
> this quite easily.
> On May 11, 2012 7:35 AM, "Dmitry Gusev" <dm...@gmail.com> wrote:
> 
>> Try this:
>>
>> http://tapestry.apache.org/overriding-exception-reporting.html
>>
>> On Fri, May 11, 2012 at 3:21 PM, jeczmien <jeczmien@podgorska.ddns.info
>>> wrote:
>>
>>> I need advice how to execute my code during tapestry exception handling.
>>>
>>>
>>> Current:
>>> 1. Something wrong has happen and tapestry shows exception page
>>> 2. error is logged in container' log
>>>
>>> My use case:
>>> 1. Something wrong has happen and tapestry shows exception page
>>> 2. error is logged in container' log
>>> 3. my method sends email notification to system operator containing
>>> exception log, or eventually exception page generated when application
>>> PRODUCTION_MODE is false.
>>>
>>> is there any contributeXXXX method for this?
>>>
>>> --
>>> View this message in context:
>>>
>> http://tapestry.1045711.n5.nabble.com/Joining-tapestry-exception-handling-tp5702797.html
>>> Sent from the Tapestry - User mailing list archive at Nabble.com.
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>>
>>
>>
>> --
>> Dmitry Gusev
>>
>> AnjLab Team
>> http://anjlab.com
>>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Joining tapestry exception handling

Posted by Bob Harner <bo...@gmail.com>.
You couldd also have the logging system send the emails. Log4j can handle
this quite easily.
On May 11, 2012 7:35 AM, "Dmitry Gusev" <dm...@gmail.com> wrote:

> Try this:
>
> http://tapestry.apache.org/overriding-exception-reporting.html
>
> On Fri, May 11, 2012 at 3:21 PM, jeczmien <jeczmien@podgorska.ddns.info
> >wrote:
>
> > I need advice how to execute my code during tapestry exception handling.
> >
> >
> > Current:
> > 1. Something wrong has happen and tapestry shows exception page
> > 2. error is logged in container' log
> >
> > My use case:
> > 1. Something wrong has happen and tapestry shows exception page
> > 2. error is logged in container' log
> > 3. my method sends email notification to system operator containing
> > exception log, or eventually exception page generated when application
> > PRODUCTION_MODE is false.
> >
> > is there any contributeXXXX method for this?
> >
> > --
> > View this message in context:
> >
> http://tapestry.1045711.n5.nabble.com/Joining-tapestry-exception-handling-tp5702797.html
> > Sent from the Tapestry - User mailing list archive at Nabble.com.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> >
>
>
> --
> Dmitry Gusev
>
> AnjLab Team
> http://anjlab.com
>

Re: Joining tapestry exception handling

Posted by Dmitry Gusev <dm...@gmail.com>.
Try this:

http://tapestry.apache.org/overriding-exception-reporting.html

On Fri, May 11, 2012 at 3:21 PM, jeczmien <je...@podgorska.ddns.info>wrote:

> I need advice how to execute my code during tapestry exception handling.
>
>
> Current:
> 1. Something wrong has happen and tapestry shows exception page
> 2. error is logged in container' log
>
> My use case:
> 1. Something wrong has happen and tapestry shows exception page
> 2. error is logged in container' log
> 3. my method sends email notification to system operator containing
> exception log, or eventually exception page generated when application
> PRODUCTION_MODE is false.
>
> is there any contributeXXXX method for this?
>
> --
> View this message in context:
> http://tapestry.1045711.n5.nabble.com/Joining-tapestry-exception-handling-tp5702797.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Dmitry Gusev

AnjLab Team
http://anjlab.com