Return-Path: X-Original-To: apmail-logging-log4j-user-archive@www.apache.org Delivered-To: apmail-logging-log4j-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0CC5618C71 for ; Wed, 27 Jan 2016 15:09:31 +0000 (UTC) Received: (qmail 37574 invoked by uid 500); 27 Jan 2016 15:09:25 -0000 Delivered-To: apmail-logging-log4j-user-archive@logging.apache.org Received: (qmail 37528 invoked by uid 500); 27 Jan 2016 15:09:25 -0000 Mailing-List: contact log4j-user-help@logging.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Log4J Users List" Reply-To: "Log4J Users List" Delivered-To: mailing list log4j-user@logging.apache.org Received: (qmail 37517 invoked by uid 99); 27 Jan 2016 15:09:25 -0000 Received: from Unknown (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 27 Jan 2016 15:09:25 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 18AB8C2A3B for ; Wed, 27 Jan 2016 15:09:25 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 3.001 X-Spam-Level: *** X-Spam-Status: No, score=3.001 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=3, URIBL_BLOCKED=0.001] autolearn=disabled Authentication-Results: spamd1-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=magine-com.20150623.gappssmtp.com Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id RwTnNhmMy55g for ; Wed, 27 Jan 2016 15:09:11 +0000 (UTC) Received: from mail-ig0-f176.google.com (mail-ig0-f176.google.com [209.85.213.176]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with ESMTPS id 5B4BA21607 for ; Wed, 27 Jan 2016 15:09:11 +0000 (UTC) Received: by mail-ig0-f176.google.com with SMTP id t15so85483440igr.0 for ; Wed, 27 Jan 2016 07:09:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=magine-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=wLova2/DeLWmy3WS/M6Yrfsb7H8g33XBhPovuwKDmt8=; b=SYtIJ9N+6WW5mOPXLtTg6qdDB+62gWHvg2NnQScg4YeljNxgFv0gAoIj2IGOIMzOlf aXPOGzcnTwnI0JvjAy9j62ecHicQYLdTRDW/cb28dZjdXq89m9lMMBGRSuGsxY8NKXXK 5IzknsbV4+yPJbLphikQSrMqx3mjSKndNGjqDRNNnlpnw4dkEm+Hqb2CqSzZZLuu5OCU rA22pKvmojRwjuu7k6Hyy9yX24lpnRdpIGCWHpzZWTwTLdNJUAfyH92LBSUtXtwNg82V Lg4Ib4M5WCafVSnUAv35glnm3e8xUaOLXXztIwgf/l4uSHdYHXDwd1/bJsqL45IUJ9a0 2X/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type; bh=wLova2/DeLWmy3WS/M6Yrfsb7H8g33XBhPovuwKDmt8=; b=FF07cHGz+yk22Mx6pVmWWeWqK2ilvs8ImSRMe85QkXfStK7lx9KcHsxLzvtkYMXiIA 6acii6ak5NYwuheistrW8PCh/8eGkl0PQPOZY6SOKUWSVXI21aS+LIBgO07uzjJa77pR ioOWR4JCvcunh2gqxHTQsJn19+ryHvWqgOg8TJkNyVZzPJfXI/yF0k2yyL/j/DnVrU9w PQxvZ9iaXoAf6Icb9MOs/zOf8v4oofI70292PlcEdtSv4hRedoxrtH+fWNO07afxssak NQo35BIHDTyDJU1Nb6CwDolCrGBWlOsokOkFivz5bpJ0z0zi8Rr8VJpANnKBXyQ3lVqm somQ== X-Gm-Message-State: AG10YOTal125HxM+X7OEFrCPxDhogwp/2qOOJwqpaIQ3NBvurHhHvQvRoo/wNDIf63MN6PcX8Ws/g6lWxFXkpoc4 MIME-Version: 1.0 X-Received: by 10.50.13.74 with SMTP id f10mr27643912igc.63.1453907350704; Wed, 27 Jan 2016 07:09:10 -0800 (PST) Received: by 10.64.212.194 with HTTP; Wed, 27 Jan 2016 07:09:10 -0800 (PST) In-Reply-To: References: <2F2C6425-9AE1-486D-B3FB-76C420FD72B8@dslextreme.com> <21B9D119-298A-401B-9A1D-BDB5AB441A20@dslextreme.com> <8100F763-BFA0-4617-97E4-590E269A12FD@dslextreme.com> Date: Wed, 27 Jan 2016 16:09:10 +0100 Message-ID: Subject: Re: Getter method for retrieving the attributes of an appender from the LoggerContext From: =?UTF-8?Q?Mikael_St=C3=A5ldal?= To: Log4J Users List Content-Type: multipart/alternative; boundary=089e013c6f5e2cf119052a522f8f --089e013c6f5e2cf119052a522f8f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I don't quite understand what you mean. On Wed, Jan 27, 2016 at 4:02 PM, Matt Sicker wrote: > That sounds a little fragile as some people either create or modify their > creation directly from the plugin factories. > > On 27 January 2016 at 07:05, Mikael St=C3=A5ldal > wrote: > > > Then perhaps we should keep the node tree and expose it for this kind o= f > > queries, something like this: > > > > String hostname =3D loggerContext.getConfiguration(). > > getAttributesForAppender("syslogAppender").get("host"); > > > > This would require a new method in > > org.apache.logging.log4j.core.config.Configuration: > > > > public Map getAttributesForAppender(String appenderName= ); > > > > > > > > On Wed, Jan 27, 2016 at 1:27 PM, Ralph Goers > > > wrote: > > > > > While I understand your point, the node tree is discarded after the > > > plugins are created. We would have to keep it around for this to work= . > > > Furthermore, each component would need to have a reference to its > > > corresponding node, which we obviously don't currently do. > > > > > > Ralph > > > > > > > On Jan 27, 2016, at 2:33 AM, Mikael St=C3=A5ldal < > mikael.staldal@magine.com > > > > > > wrote: > > > > > > > > To me it does not seems good to force all Appender implementations = to > > > > implement this. Especially not since the next logical step would th= en > > be > > > to > > > > do the same with other components such as Layouts. That would be a > lot > > of > > > > work in total, and also add more work for all future components, > > > including > > > > 3rd party plugins. > > > > > > > > I think it makes more sense, and would be less work in total, if th= e > > > > configuration system would store and expose those attributes withou= t > > > > involving the components themselves. > > > > > > > > On Wed, Jan 27, 2016 at 7:14 AM, Gary Gregory < > garydgregory@gmail.com> > > > > wrote: > > > > > > > >> Apostolis, > > > >> > > > >> You are warmly welcome to contribute to Log4j. You can create a JI= RA > > and > > > >> attach a patch in unified diff file format. Unit tests as part of > the > > > patch > > > >> are a must IMO. Feel free to flush out any design or implementatio= n > > > here on > > > >> the dev ML. > > > >> > > > >> Thank you! > > > >> Gary > > > >> > > > >> On Tue, Jan 26, 2016 at 5:02 PM, Ralph Goers < > > > ralph.goers@dslextreme.com> > > > >> wrote: > > > >> > > > >>> All the attributes have to have String representations to be usab= le > > in > > > >> the > > > >>> XML, JSON & Properties configurations. Yes, the Map could contain > > > Objects > > > >>> but then every one of them has to be cast to its real object to b= e > > > >> usable. > > > >>> > > > >>> The map should be read-only because modifying its contents would > have > > > no > > > >>> effect on the appender. > > > >>> > > > >>> The map should not be stored in an ivar but constructed whenever > the > > > >>> attributes are retrieved. Otherwise it will be temping to just ke= ep > > > them > > > >> in > > > >>> a map and not as individual attributes, which would cause problem= s. > > > >>> > > > >>> If you have nesting such as MyAppender extends MyBaseAppender > > extends > > > >>> AbstractOutputStreamAppender extends AbstractAppender, I envision= a > > > >>> fillAttributes method at each =E2=80=9Clevel=E2=80=9D that fills = in the attributes > it > > > >> knows > > > >>> about, so fillAttributeMap(map) should always call > > > >>> super.fillAttributeMap(map) - except in AbstractAppender of cours= e > - > > > and > > > >>> should call it before filling in its own attributes so that it ca= n > > > >> override > > > >>> any values provided by the base Appenders. If the primary Append= er > > > does > > > >>> not implement fillAttributeMap then only the attributes of its > super > > > >>> classes will be included, which is actually correct for the > > > >> SyslogAppender. > > > >>> > > > >>> Ralph > > > >>> > > > >>>> On Jan 26, 2016, at 5:24 PM, Apostolis Giannakidis < > > > >>> ap.giannakidis@gmail.com> wrote: > > > >>>> > > > >>>> One thing to note here. Correct me if I am wrong, but the map > should > > > >>>> be Map > > >>>> Object> because not all attributes are Strings. From the top of = my > > > >> head, > > > >>> I > > > >>>> know that an attribute could also be a boolean. > > > >>>> > > > >>>> On Wed, Jan 27, 2016 at 12:06 AM, Gary Gregory < > > > garydgregory@gmail.com > > > >>> > > > >>>> wrote: > > > >>>> > > > >>>>> I could see AbstractAppender implementing a getAttributes() > method > > > >> like > > > >>>>> this: > > > >>>>> > > > >>>>> public Map getAttributes() { > > > >>>>> Map map =3D new HashMap<>(); > > > >>>>> fillAttributeMap(map); > > > >>>>> // (1) should the map be read-only? why? > > > >>>>> // (2) if the map is cached in an ivar, the it must be > > updated > > > >> by > > > >>>>> each appender when an attribute changes, so > > > >>>>> // I'd say no and follow the KISS principle for now. > > > >>>>> return map; > > > >>>>> } > > > >>>>> > > > >>>>> protected void fillAttributeMap(Map map) { > > > >>>>> // ... > > > >>>>> } > > > >>>>> > > > >>>>> The boilerplate of creating and/or managing the map can be in > > > >>>>> getAttributes(). > > > >>>>> Actually filling in the map in is done in fillAttributeMap() > which > > > >> each > > > >>>>> appender can override. > > > >>>>> > > > >>>>> fillAttributeMap() could be abstract to force each appender to > make > > > >> sure > > > >>>>> developers pay attention to providing an implementation. > > > >>>>> > > > >>>>> Gary > > > >>>>> > > > >>>>> > > > >>>>> On Tue, Jan 26, 2016 at 3:46 PM, Apostolis Giannakidis < > > > >>>>> ap.giannakidis@gmail.com> wrote: > > > >>>>> > > > >>>>>> Well, since the idea is to add it to the Appender interface, i= t > > > means > > > >>>>> that > > > >>>>>> all concrete Appenders need to be modified as well. So, yes, I > can > > > >> give > > > >>>>> it > > > >>>>>> a try to implement it for all the Appenders. One other simple > way > > > >> would > > > >>>>> be > > > >>>>>> to implement it once in the AbstractAppender so that all its > > > >> subclasses > > > >>>>>> will inherit it. > > > >>>>>> > > > >>>>>> On Tue, Jan 26, 2016 at 9:15 PM, Gary Gregory < > > > >> garydgregory@gmail.com> > > > >>>>>> wrote: > > > >>>>>> > > > >>>>>>> On Tue, Jan 26, 2016 at 1:06 PM, Apostolis Giannakidis < > > > >>>>>>> ap.giannakidis@gmail.com> wrote: > > > >>>>>>> > > > >>>>>>>> Actually, since this seems to be a useful feature, I would > love > > to > > > >> do > > > >>>>>> the > > > >>>>>>>> patch myself and contribute it to the project, if you don't > > mind. > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> Do you plan on implementing this for all Appenders? > > > >>>>>>> > > > >>>>>>> Gary > > > >>>>>>> > > > >>>>>>>> > > > >>>>>>>> On Tue, Jan 26, 2016 at 8:56 PM, Ralph Goers < > > > >>>>>> ralph.goers@dslextreme.com > > > >>>>>>>> > > > >>>>>>>> wrote: > > > >>>>>>>> > > > >>>>>>>>> Actually, I kind of like the idea of adding a getAttributes= () > > > >>>>> method > > > >>>>>> to > > > >>>>>>>>> the Appender interface. Then each concrete Appender would d= o: > > > >>>>>>>>> > > > >>>>>>>>> public void getAttributes() { > > > >>>>>>>>> Map attributes =3D new HashMap<>(); > > > >>>>>>>>> super.getAttributes(attributes): > > > >>>>>>>>> attributes.put(=E2=80=9CmyAttribute1=E2=80=9D, =E2=80=9Cv= alue1=E2=80=9D); > > > >>>>>>>>> return Collections.unmodifiableMap(attributes); > > > >>>>>>>>> } > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>>> On Jan 26, 2016, at 1:28 PM, Gary Gregory < > > > >>>>> garydgregory@gmail.com> > > > >>>>>>>>> wrote: > > > >>>>>>>>>> > > > >>>>>>>>>> How about adding getters for the fields > > > >>>>>>>>>> in org.apache.logging.log4j.core.net.AbstractSocketManager= ? > > > >>>>>>>>>> > > > >>>>>>>>>> Gary > > > >>>>>>>>>> > > > >>>>>>>>>> On Tue, Jan 26, 2016 at 12:20 PM, Matt Sicker < > > boards@gmail.com > > > > > > > >>>>>>>> wrote: > > > >>>>>>>>>> > > > >>>>>>>>>>> You could always use reflection to access it for now. > > > >>>>>>>>>>> > > > >>>>>>>>>>> On 26 January 2016 at 14:17, Apostolis Giannakidis < > > > >>>>>>>>>>> ap.giannakidis@gmail.com > > > >>>>>>>>>>>> wrote: > > > >>>>>>>>>>> > > > >>>>>>>>>>>> Thank you very much for the prompt reply Ralph. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> As far as I can see, the SyslogAppender class does not > > expose > > > a > > > >>>>>> way > > > >>>>>>>> to > > > >>>>>>>>>>>> access these attributes. So, if there is no other way of > > > >>>>>> accessing > > > >>>>>>>>> these > > > >>>>>>>>>>>> attributes, then I am not able to retrieve the attribute= s > > that > > > >>>>> I > > > >>>>>>> want > > > >>>>>>>>>>> from > > > >>>>>>>>>>>> the existing SyslogAppender implementation. If I > understand > > > >>>>>>>> correctly, > > > >>>>>>>>>>>> correct me if I am wrong, I might have to create my own > that > > > >>>>>>> exposes > > > >>>>>>>>>>> these > > > >>>>>>>>>>>> attributes. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Apos > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> On Tue, Jan 26, 2016 at 8:03 PM, Ralph Goers < > > > >>>>>>>>> ralph.goers@dslextreme.com > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> wrote: > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> Not exactly. You can do: > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Appender appender =3D > > > >>>>>>>>>>> ctx.getConfiguration().getAppender(=E2=80=9CsyslogAppende= r=E2=80=9D); > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> then you would have to do > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> SyslogAppender syslogAppender =3D (SyslogAppender) > appender; > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> normally you would probably use instanceof to verify it > is > > > >>>>>>> actually > > > >>>>>>>> a > > > >>>>>>>>>>>>> SyslogAppender. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Once you have that you can call whatever methods the > > > >>>>>>> SyslogAppender > > > >>>>>>>>>>>>> exposes for getting its attributes. They are not stored > in > > a > > > >>>>> Map > > > >>>>>>>>>>> however, > > > >>>>>>>>>>>>> so you can=E2=80=99t just call a generic getAttribute m= ethod. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Ralph > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>>> On Jan 26, 2016, at 11:58 AM, Apostolis Giannakidis < > > > >>>>>>>>>>>>> ap.giannakidis@gmail.com> wrote: > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Hello team, > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> I have created a logger with an appender using the > > > >>>>>>>>>>> ConfigurationBuilder > > > >>>>>>>>>>>>> and > > > >>>>>>>>>>>>>> the AppenderComponentBuilder. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Let's say that this is how I create my appender: > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> AppenderComponentBuilder appenderBuilder =3D > > > >>>>>>>>>>>>>> builder.newAppender( "syslogAppender", > > > >>>>> "Syslog" ) > > > >>>>>>>>>>>>>> .addAttribute( "protocol", "TCP" ) > > > >>>>>>>>>>>>>> .addAttribute( "host", "localhost" ) > > > >>>>>>>>>>>>>> .addAttribute( "port", 514 ) > > > >>>>>>>>>>>>>> .addAttribute( "facility", "LOCAL2" ) > > > >>>>>>>>>>>>>> .addAttribute( "immediateFlush", true ) > > > >>>>>>>>>>>>>> .addAttribute( "newLine", true ); > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Then, after I finish creating the builder I use the > > > >>>>>>>>>>>>>> Configurator.initialize( builder.build() ) to get the > > > >>>>>>>> LoggerContext. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Is there any way I can access the attributes of the > > appender > > > >>>>>>>> through > > > >>>>>>>>>>>> the > > > >>>>>>>>>>>>>> LoggerContext? > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> For example something like this: > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> LoggerContext ctx =3D Configurator.initialize( > > builder.build() > > > >>>>> ); > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> String hostname =3D > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>> > > > >> > > > > > > ctx.getConfiguration()..getAppenders().get("syslogAppender").getAttribute= ("host"); > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Thank you all very much for your help. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Apostolis > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>> > > > >> > --------------------------------------------------------------------- > > > >>>>>>>>>>>>> To unsubscribe, e-mail: > > > >>>>>> log4j-user-unsubscribe@logging.apache.org > > > >>>>>>>>>>>>> For additional commands, e-mail: > > > >>>>>>> log4j-user-help@logging.apache.org > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> -- > > > >>>>>>>>>>> Matt Sicker > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> -- > > > >>>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org > > > >>>>>>>>>> Java Persistence with Hibernate, Second Edition > > > >>>>>>>>>> > > > >>>>>>>>>> JUnit in Action, Second Edition < > > > >>>>> http://www.manning.com/tahchiev/> > > > >>>>>>>>>> Spring Batch in Action > > > >>>>>>>>>> Blog: http://garygregory.wordpress.com > > > >>>>>>>>>> Home: http://garygregory.com/ > > > >>>>>>>>>> Tweet! http://twitter.com/GaryGregory > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>> > > --------------------------------------------------------------------- > > > >>>>>>>>> To unsubscribe, e-mail: > > > log4j-user-unsubscribe@logging.apache.org > > > >>>>>>>>> For additional commands, e-mail: > > > >>>>> log4j-user-help@logging.apache.org > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> -- > > > >>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org > > > >>>>>>> Java Persistence with Hibernate, Second Edition > > > >>>>>>> > > > >>>>>>> JUnit in Action, Second Edition < > > http://www.manning.com/tahchiev/> > > > >>>>>>> Spring Batch in Action > > > >>>>>>> Blog: http://garygregory.wordpress.com > > > >>>>>>> Home: http://garygregory.com/ > > > >>>>>>> Tweet! http://twitter.com/GaryGregory > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> -- > > > >>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org > > > >>>>> Java Persistence with Hibernate, Second Edition > > > >>>>> > > > >>>>> JUnit in Action, Second Edition < > http://www.manning.com/tahchiev/> > > > >>>>> Spring Batch in Action > > > >>>>> Blog: http://garygregory.wordpress.com > > > >>>>> Home: http://garygregory.com/ > > > >>>>> Tweet! http://twitter.com/GaryGregory > > > >>>>> > > > >>> > > > >>> > > > >>> > > > >>> > --------------------------------------------------------------------- > > > >>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org > > > >>> For additional commands, e-mail: > log4j-user-help@logging.apache.org > > > >>> > > > >>> > > > >> > > > >> > > > >> -- > > > >> E-Mail: garydgregory@gmail.com | ggregory@apache.org > > > >> Java Persistence with Hibernate, Second Edition > > > >> > > > >> JUnit in Action, Second Edition > > > >> Spring Batch in Action > > > >> Blog: http://garygregory.wordpress.com > > > >> Home: http://garygregory.com/ > > > >> Tweet! http://twitter.com/GaryGregory > > > >> > > > > > > > > > > > > > > > > -- > > > > [image: MagineTV] > > > > > > > > *Mikael St=C3=A5ldal* > > > > Senior software developer > > > > > > > > *Magine TV* > > > > mikael.staldal@magine.com > > > > Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com > > > > > > > > Privileged and/or Confidential Information may be contained in this > > > > message. If you are not the addressee indicated in this message > > > > (or responsible for delivery of the message to such a person), you > may > > > not > > > > copy or deliver this message to anyone. In such case, > > > > you should destroy this message and kindly notify the sender by rep= ly > > > > email. > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org > > > For additional commands, e-mail: log4j-user-help@logging.apache.org > > > > > > > > > > > > -- > > [image: MagineTV] > > > > *Mikael St=C3=A5ldal* > > Senior software developer > > > > *Magine TV* > > mikael.staldal@magine.com > > Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com > > > > Privileged and/or Confidential Information may be contained in this > > message. If you are not the addressee indicated in this message > > (or responsible for delivery of the message to such a person), you may > not > > copy or deliver this message to anyone. In such case, > > you should destroy this message and kindly notify the sender by reply > > email. > > > > > > -- > Matt Sicker > --=20 [image: MagineTV] *Mikael St=C3=A5ldal* Senior software developer *Magine TV* mikael.staldal@magine.com Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com Privileged and/or Confidential Information may be contained in this message. If you are not the addressee indicated in this message (or responsible for delivery of the message to such a person), you may not copy or deliver this message to anyone. In such case, you should destroy this message and kindly notify the sender by reply email. --089e013c6f5e2cf119052a522f8f--