camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Raul Kripalani <r...@evosent.com>
Subject Re: Log in file
Date Fri, 12 Apr 2013 16:26:46 GMT
Hi Jean Francois,

What you need is exactly the SiftAppender, which will log to a different
file depending on some dynamic parameter in the Mapped Diagnostic Context
(MDC).

Use this appender from log4j: org.apache.log4j.sift.MDCSiftingAppender.

In the Camel route, write a custom processor that sets an MDC parameter
named "camel.filename" with the CamelFileName header as the value.

In your log4j configuration, you can then configure your MDCSiftingAppender
like this:

   log4j.appender.sift.appender.file=log/$\\{camel.filename\\}.log

Here's a blog post showing how SMX achieves per-bundle logging [1], which
can serve as a reference.

Remember that the MDC context is attached to a thread, so when the thread
is reused by the Camel File endpont, it'll still have the old MDC context.
I suggest you do some housekeeping and clean up the MDC property after the
last log output in the route (by inserting another Processor straight
after, or using an AsyncCallback like in
org.apache.camel.impl.MDCUnitOfWork).

Hope this helps.

[1]
http://jason-sherman.blogspot.com.es/2012/06/serivcemix-configuring-sift-appender.html
.

*Raúl Kripalani*
Enterprise Architect, Open Source Integration specialist, Program
Manager | Apache
Camel Committer
http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
http://blog.raulkr.net | twitter: @raulvk

On Fri, Apr 12, 2013 at 1:23 PM, Jean Francois LE BESCONT <
jflebescont@gmail.com> wrote:

> Thanks for the answer Christian,
>
> After re-read my question, I think that I am not enough specific and not
> explain correctly my point. :)
>
> In my case I scan a directory and would like to produce one log ( logEIP )
>  file per file processed.
>
> something like :
>
> from("file://C:/test)
>      .log("found ${file:name}")
>      .process(myprocess1)
>      .log("end processed1  ${file:name}")
>      .process(myprocess2)
>      .log("end processed2  ${file:name}")
> .end();
>
> I have a classical log4j.properties
>
> log4j.rootLogger=INFO, A1
> log4j.appender.A1=org.apache.log4j.FileAppender
> log4j.appender.A1.File=mylogfile.log
> log4j.appender.A1.layout=org.apache.log4j.PatternLayout
> log4j.appender.A1.layout.ConversionPattern=%d{dd/MM/yyyy HH\:mm\:ss,SSS}
> %-5p [%t] - %m%n
>
>
> Adn I would like to do something like :
>
>   props.setProperty("log4j.appender.file.File","<camel current file
> name>.log");
>       LogManager.resetConfiguration();
>       PropertyConfigurator.configure(props);
>      }
>
> But with no specific process, is it possible ?
>
> thanks
>
>
>
>
>
>
>
> 2013/4/11 Christian Müller <christian.mueller@gmail.com>
>
> > You can configure it in your logging framework.
> >
> > Sent from a mobile device
> > Am 11.04.2013 13:12 schrieb "jeff" <jflebescont@gmail.com>:
> >
> > Hey !
> >
> > I think that it is not possible, but is it possible to send log message :
> >
> >
> >
> from("activemq:orders").to("log:com.mycompany.order?level=DEBUG").to("bean:processOrder");
> >
> > in a file ?
> >
> > Something like :
> >
> >
> >
> from("activemq:orders").to("log:com.mycompany.order?level=DEBUG&file=log/${file:name}.log
> > ").to("bean:processOrder");
> >
> >
> >
> > Thanks !
> >
> >
> >
> > --
> > View this message in context:
> > http://camel.465427.n5.nabble.com/Log-in-file-tp5730713.html
> > Sent from the Camel - Users mailing list archive at Nabble.com.
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message