Thanks for your thoughts, and that leads me to the following suggestion to
resolve my problem:

I've already contributed a custom RequestExceptionHandler using
binder.bind(RequestExceptionHandler.class,
CustomRequestExceptionHandler.class)
              .withId("CustomRequestExceptionHandler");

That is this service which is responsible of my log error message
(org.apache.tapestry5.internal.services.DefaultRequestExceptionHandler#handleRequestException).

In my Custom RequestExceptionHandler, I could check the user agent to match
against bots, and then instead of rendering the exception page, give them a
404 response code so they could stop crawling the page (and me skipping
logger.error at the top of the handleRequestException method).

Best regards.



2013/4/6 Muhammad Gelbana <m.gelb...@gmail.com>

> When you create a tapestry project using maven's archtype, it creates the
> below request filter (slightly modified) to log how much time each request
> consumed.
>
> // Service building
> public RequestFilter buildTimingFilter(final Logger log) {
>     return new RequestFilter() {
>         @Override
>         public boolean service(Request request, Response response,
> RequestHandler handler) throws IOException {
>             long startTime = System.currentTimeMillis();
>             try {
>                 // The responsibility of a filter is to invoke the
> corresponding method
>                 // in the handler. When you chain multiple filters
> together, each filter
>                 // received a handler that is a bridge to the next filter.
>                 return handler.service(request, response);
>             } finally {
>                 long elapsed = System.currentTimeMillis() - startTime;
>                 if (TimeUnit.MILLISECONDS.toSeconds(elapsed) >= 10) {
>                     log.warn(String.format("Request time: %d ms",
> elapsed));
>                  }
>             }
>         }
>     };
> }
>
> // Service contribution
> public void contributeRequestHandler(OrderedConfiguration<RequestFilter>
> configuration, @Local RequestFilter filter) {
>     // Each contribution to an ordered configuration has a name, When
> necessary, you may
>     // set constraints to precisely control the invocation order of the
> contributed filter
>     // within the pipeline.
>     configuration.add("Timing", filter);
> }
>
> From there, if you find a pattern for requests coming from bots, you can
> drop these requests if that suits you. This way these bots will also learn
> that the links they are requesting doesn't exists anymore and will
> eventually stop bothering you, if they are smart enough !
>
> Regards
>
>
> On Fri, Apr 5, 2013 at 10:08 PM, Nicolas Bouillon <nico...@bouillon.net
> >wrote:
>
> > Dear all,
> >
> > I'm working on a e-commerce website in Tapestry 5 since a couple of years
> > and we are making our website evolving constantly, adding some features
> and
> > changing stuff here and there.
> >
> > I'm closely monitoring application logs but i'm very annoyed by robots
> who
> > reminds some URLs that are not valid anymore.
> >
> > For example, they remind (or follow old links) to webpages that used to
> be
> > coded in PHP and where the URL contained special chars, not allowed in
> > Tapestry URLs. Or those spiders try to access an URL of a grid pager
> event,
> > but the Grid component is not there anymore (or has a different name).
> Each
> > of those hit generate a log.error message, and that hide the important
> > errors messages inside many noise. (I know, "Cool URI don't change", but
> > for page events, it could be quite had to keep old URLs...)
> >
> > The error log is something like that :
> > org.apache.tapestry5.ioc.util.UnknownValueException: Component
> > product/domain/PriceList does not contain embedded component 'v3grid'.
> >
> > It's seems to be too wide to ignore totally "UnknownValueException" log
> > appender, because it might hide real mistakes in the web application.
> >
> > Is there a way to avoid this kind of behavior ? How do you treat error
> logs
> > from your applications ?
> >
> > Thanks.
> >
> > Nicolas.
> >
>

Reply via email to