The spooler logging facility is not able to work in different threads.
To use logging from different threads it is recommended to use the log4j framework.
An example for a Java class, which is using multiple threads and log4j:
package com.sos.examples.MultiThreadLogging; import org.apache.log4j.BasicConfigurator; import sos.scheduler.job.JobSchedulerJobAdapter; public class MultiThreadLogging extends JobSchedulerJobAdapter { private final String conClassName = this.getClass().getSimpleName(); @SuppressWarnings("unused") private static final String conSVNVersion = "$Id$"; @Override public boolean spooler_open() throws Exception { super.spooler_open(); spooler_log.info("starting " + conClassName); return true; } @Override public boolean spooler_process() throws Exception { super.spooler_process(); /** * Overwrite the log4j appender for the spooler_log, because all log-output from another thread * than thread-0 is not logged actually. */ BasicConfigurator.configure(); // log4j output to stdout from this thread logger.info("in spooler_process"); final Thread objThread = new Thread() { @Override public void run() { try { System.out.println("test from Thread in " + conClassName); logger.info("test from Thread"); sleep(2000); } catch (Exception e) { e.printStackTrace(System.err); } } }; final Thread objThread2 = new Thread() { @Override public void run() { try { System.out.println("test from Thread2 in " + conClassName); logger.info("test from Thread2"); sleep(2000); } catch (Exception e) { e.printStackTrace(System.err); } } }; objThread.start(); objThread2.start(); objThread.join(); objThread2.join(); logger.info("exit spooler_process"); return signalSuccess(); } }
The job to execute this class:
<job title="Test 4 MultiThreadedLogging" > <script language="java" java_class_path="" java_class="com.sos.examples.MultiThreadLogging"/> <run_time /> </job>
The content of the log file after execution of the Java class is shown below:
2013-08-14 13:58:27.419 [info] SCHEDULER-918 state=starting (at=2013-08-14 13:58:27.393) 2013-08-14 13:58:28.000 [info] starting MultiThreadLogging 2013-08-14 13:58:28.075 [info] INFO [main] (SOSMsg.java:140) - LOG_I_0020: JobSchedulerLog4JAppender ist jetzt als log4j-appender konfiguriert 2013-08-14 13:58:28.080 [info] INFO [main] (JobSchedulerJobAdapter.java:116) - 1.3.12.3142 (2013-05-22T16:17:36.781+0200) Copyright 2003-2013 SOS GmbH Berlin 2013-08-14 13:58:28.109 [info] INFO [main] (MultiThreadLogging.java:34) - in spooler_process 2013-08-14 13:58:28.999 [info] 36 [main] INFO root - in spooler_process 2013-08-14 13:58:28.999 [info] test from Thread in MultiThreadLogging 2013-08-14 13:58:28.999 [info] test from Thread2 in MultiThreadLogging 2013-08-14 13:58:28.999 [info] 42 [Thread-0] INFO root - test from Thread 2013-08-14 13:58:28.999 [info] 42 [Thread-1] INFO root - test from Thread2 2013-08-14 13:58:30.115 [info] INFO [main] (MultiThreadLogging.java:71) - exit spooler_process 2013-08-14 13:58:30.147 [info] Job MultiThreadedLogging terminated. 2013-08-14 13:58:30.189 [info] 2044 [main] INFO root - exit spooler_process