That's strange: if you are logging at startup the shutdown hook should be 
registered before the call to logger.log() returns... Does the batch start 
another JVM process?

Sent from my iPhone

> On 2015/07/21, at 17:18, Mikael Ståldal <mikael.stal...@magine.com> wrote:
> 
> The app do some logging at startup as well, and quite some logging in
> between. However, it is a short running batch job, and in this case the JVM
> only runs for 6 seconds in total.
> 
> See below to get some more context about the timing. The first and last log
> line are not from Log4j, they are from a bash script used to start the JVM.
> 
> I think that this is not only one problem, but two. First that this occurs
> in the first place. Second that it is logged at FATAL level.
> 
> 
> 2015-07-21 10:11:24,022  Before JVM start
> 
> 2015-07-21 10:11:24,771  INFO com.magine.maglev.Job$: Startup
> [... more logging here ...]
> 2015-07-21 10:11:30,216 FATAL Unable to register shutdown hook because JVM
> is shutting down. java.lang.IllegalStateException: Cannot add new shutdown
> hook as this is not started. Current state: STOPPED
>        at
> org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.addShutdownCallback(DefaultShutdownCallbackRegistry.java:113)
>        at
> org.apache.logging.log4j.core.impl.Log4jContextFactory.addShutdownCallback(Log4jContextFactory.java:244)
>        at
> org.apache.logging.log4j.core.LoggerContext.setUpShutdownHook(LoggerContext.java:182)
>        at
> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:143)
>        at
> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:146)
>        at
> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41)
>        at
> org.apache.logging.log4j.LogManager.getContext(LogManager.java:175)
>        at
> org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:102)
>        at
> org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
>        at
> org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42)
>        at
> org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
>        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)
>        at org.apache.spark.Logging$class.log(Logging.scala:52)
>        at
> org.apache.spark.rpc.akka.AkkaRpcEnv$$anonfun$actorRef$lzycompute$1$1$$anon$1.log(AkkaRpcEnv.scala:93)
>        at
> org.apache.spark.util.ActorLogReceive$$anon$1.apply(ActorLogReceive.scala:55)
>        at
> org.apache.spark.util.ActorLogReceive$$anon$1.apply(ActorLogReceive.scala:42)
>        at
> scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
>        at
> org.apache.spark.util.ActorLogReceive$$anon$1.applyOrElse(ActorLogReceive.scala:42)
>        at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
>        at
> org.apache.spark.rpc.akka.AkkaRpcEnv$$anonfun$actorRef$lzycompute$1$1$$anon$1.aroundReceive(AkkaRpcEnv.scala:93)
>        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
>        at akka.actor.ActorCell.invoke(ActorCell.scala:487)
>        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
>        at akka.dispatch.Mailbox.run(Mailbox.scala:220)
>        at
> akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
>        at
> scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
>        at
> scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
>        at
> scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
>        at
> scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
> 
> 2015-07-21 10:11:30,558 After JVM end
> 
> 
>> On Tue, Jul 21, 2015 at 12:58 AM, Remko Popma <remko.po...@gmail.com> wrote:
>> 
>> Gary, enjoy your holiday!
>> 
>> Mikael,
>> At first glance it seems to me that this problem happens because the
>> application does not start logging until it has done all the work and the
>> JVM is shutting down.
>> 
>> However, I'm not sure it really is a problem: Log4j tried to registered a
>> shutdown hook, but couldn't. It then notified you of the problem and
>> continued to work. (The stack trace was generated from a try/catch block.)
>> 
>> If this error report is annoying, a workaround may be to change to your app
>> to start logging at startup.
>> 
>> Remko
>> 
>> On Mon, Jul 20, 2015 at 6:25 PM, Mikael Ståldal <mikael.stal...@magine.com
>> wrote:
>> 
>>> 2015-07-20 11:23:31,741 FATAL Unable to register shutdown hook because
>> JVM
>>> is shutting down. java.lang.IllegalStateException: Cannot add new
>> shutdown
>>> hook as this is not started. Current state: STOPPED
>>>        at
>> org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.addShutdownCallback(DefaultShutdownCallbackRegistry.java:113)
>>>        at
>> org.apache.logging.log4j.core.impl.Log4jContextFactory.addShutdownCallback(Log4jContextFactory.java:244)
>>>        at
>> org.apache.logging.log4j.core.LoggerContext.setUpShutdownHook(LoggerContext.java:182)
>>>        at
>>> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:143)
>>>        at
>> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:146)
>>>        at
>> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41)
>>>        at
>>> org.apache.logging.log4j.LogManager.getContext(LogManager.java:175)
>>>        at
>> org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:102)
>>>        at
>> org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
>>>        at
>> org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42)
>>>        at
>> org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
>>>        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)
>>>        at org.apache.spark.Logging$class.log(Logging.scala:52)
>>>        at
>> org.apache.spark.rpc.akka.AkkaRpcEnv$$anonfun$actorRef$lzycompute$1$1$$anon$1.log(AkkaRpcEnv.scala:93)
>>>        at
>> org.apache.spark.util.ActorLogReceive$$anon$1.apply(ActorLogReceive.scala:55)
>>>        at
>> org.apache.spark.util.ActorLogReceive$$anon$1.apply(ActorLogReceive.scala:42)
>>>        at
>>> scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
>>>        at
>> org.apache.spark.util.ActorLogReceive$$anon$1.applyOrElse(ActorLogReceive.scala:42)
>>>        at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
>>>        at
>> org.apache.spark.rpc.akka.AkkaRpcEnv$$anonfun$actorRef$lzycompute$1$1$$anon$1.aroundReceive(AkkaRpcEnv.scala:93)
>>>        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
>>>        at akka.actor.ActorCell.invoke(ActorCell.scala:487)
>>>        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)
>>>        at akka.dispatch.Mailbox.run(Mailbox.scala:220)
>>>        at
>> akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
>>>        at
>>> scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
>>>        at
>> scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
>>>        at
>>> scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
>>>        at
>> scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
>>> 
>>> 
>>> On Sat, Jul 18, 2015 at 1:44 AM, Gary Gregory <garydgreg...@gmail.com>
>>> wrote:
>>> 
>>>> Hi Mikael,
>>>> 
>>>> I just committed a minor tweak in git master: Include exceptions when
>>>> logging FATAL events in
>>>> org.apache.logging.log4j.core.LoggerContext.setUpShutdownHook()
>>>> 
>>>> Can you try git master and see what is the exception that gets logged?
>>>> 
>>>> Thank you,
>>>> Gary
>>>> 
>>>> On Thu, Jul 16, 2015 at 1:49 AM, Mikael Ståldal <
>>> mikael.stal...@magine.com
>>>> wrote:
>>>> 
>>>>> I sometimes get the message:
>>>>> FATAL Unable to register shutdown hook because JVM is shutting down.
>>>>> 
>>>>> This happens in a short running batch job.
>>>>> 
>>>>> Can it be so that Log4j did not have time to initialize fully before
>>>>> shutting down? What can be done about it?
>>>>> 
>>>>> Log4j 2.3.
>>>>> 
>>>>> --
>>>>> [image: MagineTV]
>>>>> 
>>>>> *Mikael Ståldal*
>>>>> Senior backend developer
>>>>> 
>>>>> *Magine TV*
>>>>> mikael.stal...@magine.com
>>>>> Regeringsgatan 25  | 111 53 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: garydgreg...@gmail.com | ggreg...@apache.org
>>>> 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 backend developer
>>> 
>>> *Magine TV*
>>> mikael.stal...@magine.com
>>> Regeringsgatan 25  | 111 53 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 backend developer
> 
> *Magine TV*
> mikael.stal...@magine.com
> Regeringsgatan 25  | 111 53 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.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to