To track this, I temporary added this to KafkaManager.releaseSub():
LOGGER.info("releaseSub: timeout=" + timeout + " " + timeUnit.toString(), new
Throwable());
and I get:
2016-09-28 17:43:14,382 pool-1-thread-1 INFO releaseSub: timeout=0
MILLISECONDS java.lang.Throwable
at
org.apache.logging.log4j.core.appender.mom.kafka.KafkaManager.releaseSub(KafkaManager.java:60)
at
org.apache.logging.log4j.core.appender.AbstractManager.stop(AbstractManager.java:85)
at
org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.stop(KafkaAppender.java:107)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.stop(AbstractConfiguration.java:349)
at
org.apache.logging.log4j.core.LoggerContext.stop(LoggerContext.java:329)
at
org.apache.logging.log4j.core.AbstractLifeCycle.stop(AbstractLifeCycle.java:127)
at
org.apache.logging.log4j.core.LoggerContext$1.run(LoggerContext.java:275)
at
org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry$RegisteredCancellable.run(DefaultShutdownCallbackRegistry.java:104)
at
org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.run(DefaultShutdownCallbackRegistry.java:74)
at java.lang.Thread.run(Thread.java:745)
the culprit is AbstractLifeCycle.stop() which uses a default timeout of 0.
On Wed, Sep 28, 2016 at 5:40 PM, Gary Gregory <[email protected]>
wrote:
> It is used when you call LifeCycle2.stop(long, TimeUnit), like stopping a
> LoggerContext or all of Log4j through the shutdown() method.
>
> Gary
>
> On Wed, Sep 28, 2016 at 8:35 AM, Mikael Ståldal <[email protected]
> > wrote:
>
>> I see that KafkaManager.releaseSub() is passed a timeout of 0 at
>> runtime, which is not very useful. How is this actually supposed to be
>> used? How can you make it get something else than 0?
>>
>> On Wed, Sep 28, 2016 at 5:33 PM, Mikael Ståldal <
>> [email protected]> wrote:
>>
>>> We have already discussed this here: https://issues.apache.or
>>> g/jira/browse/LOG4J2-1390
>>>
>>> I don't think the release process is the right occasion to reopen this
>>> discussion. Can we please keep the Kafka 0.8 compatibility for this
>>> release, and then possibly reopen this discussion after the release (and
>>> possibly changing it for the 2.8 release)?
>>>
>>> On Wed, Sep 28, 2016 at 5:24 PM, Gary Gregory <[email protected]>
>>> wrote:
>>>
>>>> On Wed, Sep 28, 2016 at 8:13 AM, Mikael Ståldal <
>>>> [email protected]> wrote:
>>>>
>>>>> Kafka server 0.8 is still in use, and newer Kafka clients cannot
>>>>> connect to older Kafka servers.
>>>>>
>>>>
>>>> There will always be users of old software. That does not mean that new
>>>> versions of Log4j must support old software, especially pre-1.0 software.
>>>>
>>>> Gary
>>>>
>>>>
>>>>>
>>>>> On Wed, Sep 28, 2016 at 5:10 PM, Gary Gregory <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> I do not think it makes sense to support old versions that are not
>>>>>> even 1.0.
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>> On Wed, Sep 28, 2016 at 7:42 AM, Mikael Ståldal <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> I fixed the Kafka issue and pushed it to master branch.
>>>>>>>
>>>>>>> However, I have another concern, what timeout value is actually
>>>>>>> passed in to AbstractManager.releaseSub ?
>>>>>>>
>>>>>>> On Wed, Sep 28, 2016 at 3:51 PM, Mikael Ståldal <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> -1 since the Kafka appender now only works with Kafka client (and
>>>>>>>> thus server) 0.9+, even though we agreed to keep compatibility with
>>>>>>>> 0.8 for
>>>>>>>> the time being:
>>>>>>>>
>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1390
>>>>>>>>
>>>>>>>> The problem appeared with commit
>>>>>>>> 170469514b374eb5a5a33bde6936162fd608f097
>>>>>>>> by Gary in KafkaManager.java (method releaseSub).
>>>>>>>>
>>>>>>>> I get this error with kafka-clients 0.8.2.2:
>>>>>>>>
>>>>>>>> java.lang.NoSuchMethodError: org.apache.kafka.clients.produ
>>>>>>>> cer.Producer.close(JLjava/util/concurrent/TimeUnit;)V
>>>>>>>> at org.apache.logging.log4j.core.appender.mom.kafka.KafkaManage
>>>>>>>> r.releaseSub(KafkaManager.java:61)
>>>>>>>> at org.apache.logging.log4j.core.appender.AbstractManager.stop(
>>>>>>>> AbstractManager.java:85)
>>>>>>>> at org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppend
>>>>>>>> er.stop(KafkaAppender.java:107)
>>>>>>>> at org.apache.logging.log4j.core.config.AbstractConfiguration.s
>>>>>>>> top(AbstractConfiguration.java:349)
>>>>>>>> at org.apache.logging.log4j.core.LoggerContext.stop(LoggerConte
>>>>>>>> xt.java:329)
>>>>>>>> at org.apache.logging.log4j.core.AbstractLifeCycle.stop(Abstrac
>>>>>>>> tLifeCycle.java:127)
>>>>>>>> at org.apache.logging.log4j.core.LoggerContext$1.run(LoggerCont
>>>>>>>> ext.java:275)
>>>>>>>> at org.apache.logging.log4j.core.util.DefaultShutdownCallbackRe
>>>>>>>> gistry$RegisteredCancellable.run(DefaultShutdownCallbackRegi
>>>>>>>> stry.java:104)
>>>>>>>> at org.apache.logging.log4j.core.util.DefaultShutdownCallbackRe
>>>>>>>> gistry.run(DefaultShutdownCallbackRegistry.java:74)
>>>>>>>> at java.lang.Thread.run(Thread.java:745)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Sep 26, 2016 at 5:50 PM, Ralph Goers <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> This is a vote to release Log4j 2.6.2, the next version of the
>>>>>>>>> Log4j 2 project.
>>>>>>>>>
>>>>>>>>> Please download, test, and cast your votes on the log4j developers
>>>>>>>>> list.
>>>>>>>>> [] +1, release the artifacts
>>>>>>>>> [] -1, don't release because...
>>>>>>>>>
>>>>>>>>> The vote will remain open for 72 hours (or more if required). All
>>>>>>>>> votes are welcome and we encourage everyone to test the release, but
>>>>>>>>> only
>>>>>>>>> Logging PMC votes are “officially” counted. As always, at least 3 +1
>>>>>>>>> votes
>>>>>>>>> and more positive than negative votes are required.
>>>>>>>>>
>>>>>>>>> Changes in this version include:
>>>>>>>>>
>>>>>>>>> New features:
>>>>>>>>> o LOG4J2-1578: RoutingAppender can be configured with scripts. Add
>>>>>>>>> Script in a Routes element.
>>>>>>>>> o LOG4J2-1597: Add a ScriptAppenderSelector to create an Appender
>>>>>>>>> specified by a Script.
>>>>>>>>> o LOG4J2-1349: (GC) Added support for garbage-free ThreadContext
>>>>>>>>> map. Disabled by default, users need to enable this explicitly.
>>>>>>>>> o LOG4J2-1447: (GC) Changed LogEvent's internal data structure for
>>>>>>>>> context data to be garbage-free. Added method
>>>>>>>>> LogEvent#getContextData(), deprecated method #getContextMap().
>>>>>>>>> o LOG4J2-1010: Users can now inject context data from other sources
>>>>>>>>> than ThreadContext. Values can be any Object, not just Strings.
>>>>>>>>> Thanks to Mikael Ståldal.
>>>>>>>>> o LOG4J2-1568: Added support for
>>>>>>>>> java.util.concurrent.LinkedTransferQueue to AsyncAppender.
>>>>>>>>> o LOG4J2-1430: Added optional support for Conversant
>>>>>>>>> DisruptorBlockingQueue in AsyncAppender. Thanks to John Cairns.
>>>>>>>>> o LOG4J2-1439: Added optional support for JCTools MPSC bounded
>>>>>>>>> lock-free queue in AsyncAppender. Thanks to Anthony Maire.
>>>>>>>>> o LOG4J2-1558: SocketAppender now supports IO buffering.
>>>>>>>>> o LOG4J2-1557: Add a Builder for the SocketAppender (deprecates
>>>>>>>>> factory method).
>>>>>>>>> o LOG4J2-1609: Add a Builder to ServletAppender and deprecate
>>>>>>>>> factory method.
>>>>>>>>> o LOG4J2-1553: AbstractManager now implements AutoCloseable.
>>>>>>>>> o LOG4J2-1528: Added ability to generate Log4j 2-style XML
>>>>>>>>> configuration file from ConfigurationBuilder.
>>>>>>>>> o LOG4J2-1181: Added Logging API for Scala 2.10 and 2.11.
>>>>>>>>> o LOG4J2-1512: Added options to exclude stack trace from JSON, XML
>>>>>>>>> and YAML layouts.
>>>>>>>>> o LOG4J2-1539: Added Core API Configurator.shutdown(LoggerContext,
>>>>>>>>> long, TimeUnit).
>>>>>>>>> o LOG4J2-1501: FileAppender is now able to create files on-demand.
>>>>>>>>> o LOG4J2-1504: RollingFileAppender is now able to create files
>>>>>>>>> on-demand.
>>>>>>>>> o LOG4J2-1471: [PatternLayout] Add an ANSI option to %xThrowable.
>>>>>>>>> o LOG4J2-1472: org.apache.logging.log4j.core.LoggerContext now
>>>>>>>>> implements Closeable.
>>>>>>>>> o LOG4J2-1458: [PatternLayout] Add an ANSI option to %message.
>>>>>>>>> o LOG4J2-1505: Create a Builder for the FileAppender plugin to
>>>>>>>>> facilitate adding attributes in the future.
>>>>>>>>> o LOG4J2-1507: Allow Builders to be completely generic.
>>>>>>>>> o LOG4J2-1508: Allow a Builder to subclass another Builder.
>>>>>>>>> o LOG4J2-1516: Add ThreadContextMap2 interface supporting method
>>>>>>>>> putAll(Map<String, String>). Thanks to Gary Gregory.
>>>>>>>>> o LOG4J2-1519: Add ThreadContext.putAll(Map<String, String>).
>>>>>>>>> o LOG4J2-1520: Add JUnit Rule implementations to manage the thread
>>>>>>>>> context.
>>>>>>>>> o LOG4J2-1547: The Core AbstractConfiguration now tracks its
>>>>>>>>> LoggerContext and add Configuration.getLoggerContext().
>>>>>>>>> o LOG4J2-1540: The Core AbstractManager now tracks its LoggerContext.
>>>>>>>>> o LOG4J2-1577: Add a Builder to the RoutingAppender and deprecate
>>>>>>>>> factory method.
>>>>>>>>>
>>>>>>>>> Fixed Bugs:
>>>>>>>>> o LOG4J2-1611: Improved performance of context data injector for web
>>>>>>>>> applications to be on par with standalone applications.
>>>>>>>>> o LOG4J2-1591: Introduced new interface LifeCycle2 with
>>>>>>>>> stop(long,TimeUnit) method to avoid breaking backwards compatibility
>>>>>>>>> with new Configurator.shutdown(LoggerContext, long, TimeUnit) API.
>>>>>>>>> o LOG4J2-1590: Fixed issue with filters extending AbstractFilter
>>>>>>>>> that did not override methods with unrolled varargs.
>>>>>>>>> o LOG4J2-1583: Fixed scrambled log messages triggered by nested
>>>>>>>>> logging from toString() method of a logging parameter object. Thanks
>>>>>>>>> to Larry West.
>>>>>>>>> o LOG4J2-1259: Log4j threads are no longer leaking on Tomcat
>>>>>>>>> shutdown. Thanks to Misagh Moayyed, Steffen Offermann.
>>>>>>>>> o LOG4J2-1051: When starting on Google App Engine, Interpolator now
>>>>>>>>> suppresses the NoClassDefFoundError stack trace for the jvmrunargs
>>>>>>>>> lookup. Thanks to Lukasz Lenart.
>>>>>>>>> o LOG4J2-1582: When initializing on platforms where JMX is not
>>>>>>>>> available, Interpolator component no longer prints stack trace for
>>>>>>>>> warning messages.
>>>>>>>>> o LOG4J2-1581: Unregistering JMX components no longer prints a stack
>>>>>>>>> trace when the MBean has already been unregistered.
>>>>>>>>> o LOG4J2-1313: Support Property values to be specified in
>>>>>>>>> configuration as a value attribute as well as an element. Thanks to
>>>>>>>>> Philipp Knobel, Leon Finker.
>>>>>>>>> o LOG4J2-1575: (GC) LoggerConfig now stores configuration properties
>>>>>>>>> in a List, not a Map to prevent creating temporary Iterator objects.
>>>>>>>>> Added method LoggerConfig#getPropertyList(), deprecated method
>>>>>>>>> #getProperties().
>>>>>>>>> o LOG4J2-1457: Fixed class loader deadlock when using async logging
>>>>>>>>> and extended stack trace pattern. Thanks to Leon Finker.
>>>>>>>>> o LOG4J2-1563: Fix to prevent Log4j 2.6.2 and higher from losing
>>>>>>>>> exceptions when a security manager is present. Thanks to Jason Tedor.
>>>>>>>>> o LOG4J2-1530: Fixed issue where LogEvent.getContextStack() returned
>>>>>>>>> null.
>>>>>>>>> o LOG4J2-1518: Prevent deadlock in Async Loggers when queue is full
>>>>>>>>> and logged Object's toString() logs another message. Thanks to Leon
>>>>>>>>> Finker.
>>>>>>>>> o LOG4J2-1542: Prevent ArrayIndexOutOfBoundsException in
>>>>>>>>> ParameterizedMessage.formatTo for single-char or empty messages.
>>>>>>>>> Thanks to Rogério Lecarião Leite.
>>>>>>>>> o LOG4J2-1549: Fixed issue where
>>>>>>>>> AsyncLoggerContextSelector+PropertiesConfigurationBuilder defaulted
>>>>>>>>> to includeLocation=true. Thanks to Jason Bedard.
>>>>>>>>> o LOG4J2-1562: Prevent SocketAppender memory usage from growing
>>>>>>>>> unbounded if it cannot connect to a server.
>>>>>>>>> o LOG4J2-1559: Prevent NPE in Level.isInRange. Thanks to Andrey
>>>>>>>>> Plotkin.
>>>>>>>>> o LOG4J2-1511: DynamicThresholdFilter filtered incorrectly when
>>>>>>>>> params were passed as individual arguments instead of varargs. Thanks
>>>>>>>>> to Srikanth Surukuntu.
>>>>>>>>> o LOG4J2-1548: [CronTriggeringPolicy] ConfigurationScheduler
>>>>>>>>> scheduled the task infinitely after first fire.
>>>>>>>>> o LOG4J2-1506: Log4j should not unregister JMX MBeans when
>>>>>>>>> log4j2.disable.jmx property is true. Thanks to Johannes Schleger.
>>>>>>>>> o LOG4J2-1490: Log4j2 should postpone creating log file until the
>>>>>>>>> appender actually receives an event. Thanks to Krzysztof Taborski.
>>>>>>>>> o LOG4J2-1320: Support loading custom plugins from jar files and
>>>>>>>>> directories whose classpath entries use the "vfs" URL protocol.
>>>>>>>>> Thanks to Paresh Varke, Pierrick Hymbert.
>>>>>>>>> o LOG4J2-1541: Fix file handle resource leak in
>>>>>>>>> XmlConfiguration.XmlConfiguration(ConfigurationSource).
>>>>>>>>> o LOG4J2-1538: Prevent NPE when dynamically removing filters. Thanks
>>>>>>>>> to Igor Karpov.
>>>>>>>>> o LOG4J2-1532: Attributes were not merged properly in composite
>>>>>>>>> configurations.
>>>>>>>>> o LOG4J2-1529: Attributes were not merged properly in composite
>>>>>>>>> configurations. Thanks to Sridevi Narra.
>>>>>>>>> o LOG4J2-1527: Prevent NPE in
>>>>>>>>> RingBufferLogEvent.getFormattedMessage() when used in web
>>>>>>>>> applications. Thanks to Jose Leon.
>>>>>>>>> o LOG4J2-905: Added ability to disable (date) lookup completely for
>>>>>>>>> compatibility with other libraries like Camel. Thanks to Moritz Löser.
>>>>>>>>> o LOG4J2-1526: Added support for setting StatusLogger destination in
>>>>>>>>> ConfigurationBuilder.
>>>>>>>>> o LOG4J2-1448: Allow comma separated agents, host list to be passed
>>>>>>>>> to FlumeAppender. Thanks to Keith Laban.
>>>>>>>>> o LOG4J2-1500: Merging configurations failed with an NPE when
>>>>>>>>> comparing Nodes with different attributes. Thanks to Jose Leon.
>>>>>>>>> o LOG4J2-1482: Fixed improper header in CsvParameterLayout. Thanks
>>>>>>>>> to Sumit Singhal.
>>>>>>>>> o LOG4J2-1199: Documented that JVM Input Arguments Lookup (JMX) is
>>>>>>>>> not available on Google App Engine.
>>>>>>>>> o LOG4J2-1438: (GC) Added method getParameter() to ObjectMessage
>>>>>>>>> (and ReusableObjectMessage).
>>>>>>>>> o LOG4J2-1488: (GC) Fixed ISO8601 %date conversion pattern with a
>>>>>>>>> period '.' separator for milliseconds is now garbage free. Thanks to
>>>>>>>>> Richard Zschech.
>>>>>>>>> o LOG4J2-1489: (GC) Fixed %date conversion patterns with a timezone
>>>>>>>>> parameter are now garbage free. Thanks to Richard Zschech.
>>>>>>>>> o LOG4J2-1279: Prevent NullPointerException in
>>>>>>>>> FastDateParser$TimeZoneStrategy. Thanks to Tony Baines.
>>>>>>>>> o LOG4J2-1341: (GC) HighlightConverter and StyleConverter are now
>>>>>>>>> GC-free. Thanks to Richard Zschech.
>>>>>>>>> o LOG4J2-1467: [OSGi] Fixed missing import package. Thanks to Ralf,
>>>>>>>>> Gary Gregory.
>>>>>>>>> o LOG4J2-351: [OSGi] Fixed wrong Fragment-Host in manifest files.
>>>>>>>>> Thanks to Roland Weiglhofer.
>>>>>>>>> o LOG4J2-1313: Properties declared in configuration can now have
>>>>>>>>> their value either in the element body or in an attribute named
>>>>>>>>> "value". Thanks to Philipp Knobel.
>>>>>>>>> o LOG4J2-1235:
>>>>>>>>> org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy was
>>>>>>>>> not working correctly. Thanks to Niranjan Rao, Sascha Scholz, Aleksey
>>>>>>>>> Zvolinsky.
>>>>>>>>> o LOG4J2-1502: Fixed issue where CsvParameterLayout and
>>>>>>>>> CsvLogEventLayout inserted NUL characters if data starts with {, (, [
>>>>>>>>> or " Thanks to Sumit Singhal.
>>>>>>>>> o LOG4J2-1573: Layout is no longer optional. Thanks to Steffen
>>>>>>>>> Offermann.
>>>>>>>>> o LOG4J2-1608: ServletAppender does not provide throwable object to
>>>>>>>>> ServletContext.
>>>>>>>>> o LOG4J2-1599: Prevent potential NPE in
>>>>>>>>> org.apache.logging.log4j.message.ParameterFormatter.formatMessage3(StringBuilder,
>>>>>>>>> char[], int, Object[], int, int[]).
>>>>>>>>> o LOG4J2-1600: Prevent potential NPE due to
>>>>>>>>> org.apache.logging.log4j.core.layout.MarkerPatternSelector.createSelector(PatternMatch[],
>>>>>>>>> String, boolean, boolean, Configuration).
>>>>>>>>> o LOG4J2-1601: Prevent potential NPE due to
>>>>>>>>> org.apache.logging.log4j.core.layout.ScriptPatternSelector.createSelector(AbstractScript,
>>>>>>>>> PatternMatch[], String, boolean, boolean, Configuration).
>>>>>>>>> o LOG4J2-1602: Prevent potential NPE in
>>>>>>>>> org.apache.logging.log4j.core.util.datetime.FormatCache.MultipartKey.equals(Object)
>>>>>>>>> when object is null.
>>>>>>>>> o LOG4J2-1603: Redo hashCode() and equals() methods in
>>>>>>>>> org.apache.logging.log4j.core.net.ssl classes.
>>>>>>>>> o LOG4J2-1610: Add targetNamespace to log4j-config.xsd. GitHub #43.
>>>>>>>>> Thanks to Shubhankar.
>>>>>>>>>
>>>>>>>>> Changes:
>>>>>>>>> o LOG4J2-1604: Log4j2 TcpSocketServer in background. Thanks to Colin
>>>>>>>>> Hillman.
>>>>>>>>> o LOG4J2-1574: Allow the RollingFileAppender to use default pattern
>>>>>>>>> layout.
>>>>>>>>> o LOG4J2-1556: Custom Log4j threads now extend Log4jThread.
>>>>>>>>> o LOG4J2-1605: Improve error messages for TcpSocketServer and
>>>>>>>>> UdpSocketServer.
>>>>>>>>> o LOG4J2-1458: Updated Jackson from 2.7.5 to 2.8.0.
>>>>>>>>> o LOG4J2-1494: Updated Jackson from 2.8.0 to 2.8.1.
>>>>>>>>> o LOG4J2-1569: Updated Jackson from 2.8.1 to 2.8.2.
>>>>>>>>> o LOG4J2-1598: Updated Jackson from 2.8.2 to 2.8.3.
>>>>>>>>> o LOG4J2-1495: Updated LMAX Disruptor from 3.3.4 to 3.3.5.
>>>>>>>>> o LOG4J2-1496: Updated Kafka client from 0.9.1.0 to 0.10.0.0.
>>>>>>>>> o LOG4J2-1533: Updated Kafka client from 0.10.0.0 to 0.10.0.1.
>>>>>>>>> o LOG4J2-1487: Updated JMS test from ActiveMQ 5.13.3 to 5.13.4.
>>>>>>>>> o LOG4J2-1551: Updated JMS test from ActiveMQ 5.13.4 to 5.14.0.
>>>>>>>>> o LOG4J2-1543: Removed deprecated Core API
>>>>>>>>> org.apache.logging.log4j.core.util.Constants.UTF_8.
>>>>>>>>> o LOG4J2-1544: Removed deprecated Core API
>>>>>>>>> org.apache.logging.log4j.core.util.Assert.requireNonNull(T, String).
>>>>>>>>> o LOG4J2-1545: Removed deprecated Web API
>>>>>>>>> org.apache.logging.log4j.web.WebLookup.getServletContext().
>>>>>>>>>
>>>>>>>>> Tag:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> a) for a new copy do "git clone
>>>>>>>>> https://git-wip-us.apache.org/repos/asf/logging-log4j2.git" and then
>>>>>>>>> "git checkout tags/log4j-2.7-rc1”
>>>>>>>>> b) for an existing working copy to “git pull” and then “git checkout
>>>>>>>>> tags/log4j-2.7-rc1”
>>>>>>>>>
>>>>>>>>> Web Site:
>>>>>>>>> <http://rgoers.github.io/log4j2-site/index.html>http://rgoers.github.io/log4j2-site/index.html
>>>>>>>>>
>>>>>>>>> Artifacts:
>>>>>>>>> https://repository.apache.org/content/repositories/orgapachelogging-1021/
>>>>>>>>>
>>>>>>>>> You may download all the artifacts by executing:
>>>>>>>>>
>>>>>>>>> wget -e robots=off --cut-dirs=7 -nH -r -p -np --no-check-certificate
>>>>>>>>> https://repository.apache.org/content/repositories/orgapachelogging-1021/org/apache/logging/log4j/
>>>>>>>>>
>>>>>>>>> Ralph
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> [image: MagineTV]
>>>>>>>>
>>>>>>>> *Mikael Ståldal*
>>>>>>>> Senior software developer
>>>>>>>>
>>>>>>>> *Magine TV*
>>>>>>>> [email protected]
>>>>>>>> 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.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> [image: MagineTV]
>>>>>>>
>>>>>>> *Mikael Ståldal*
>>>>>>> Senior software developer
>>>>>>>
>>>>>>> *Magine TV*
>>>>>>> [email protected]
>>>>>>> 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.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> E-Mail: [email protected] | [email protected]
>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>> <http://www.manning.com/bauer3/>
>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>> Blog: http://garygregory.wordpress.com
>>>>>> Home: http://garygregory.com/
>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> [email protected]
>>>>> 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.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> E-Mail: [email protected] | [email protected]
>>>> Java Persistence with Hibernate, Second Edition
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> [email protected]
>>> 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.
>>>
>>
>>
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> [email protected]
>> 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.
>>
>
>
>
> --
> E-Mail: [email protected] | [email protected]
> Java Persistence with Hibernate, Second Edition
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>
--
[image: MagineTV]
*Mikael Ståldal*
Senior software developer
*Magine TV*
[email protected]
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.