/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2013, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.classic.issue; import java.util.Date; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; import ch.qos.logback.core.joran.spi.JoranException; import ch.qos.logback.core.util.StatusPrinter; public class LBCORE63 extends Thread { private final static String LOGGER_CONFIGURATION_FILE = "./src/test/input/issue/lbcore63.xml"; private final Logger logger = LoggerFactory.getLogger(LBCORE63.class); private final long start; public LBCORE63() throws JoranException { start = new Date().getTime(); LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); JoranConfigurator configurator = new JoranConfigurator(); lc.reset(); configurator.setContext(lc); configurator.doConfigure(LOGGER_CONFIGURATION_FILE); StatusPrinter.printInCaseOfErrorsOrWarnings(lc); } public void start() { ScheduledThreadPoolExecutor ex1 = new ScheduledThreadPoolExecutor(1); ScheduledThreadPoolExecutor ex2 = new ScheduledThreadPoolExecutor(1); ScheduledThreadPoolExecutor ex3 = new ScheduledThreadPoolExecutor(1); ScheduledThreadPoolExecutor ex4 = new ScheduledThreadPoolExecutor(1); ScheduledThreadPoolExecutor ex5 = new ScheduledThreadPoolExecutor(1); ex1.scheduleAtFixedRate(new Task("EX1"), 10, 10, TimeUnit.MICROSECONDS); ex2.scheduleAtFixedRate(new Task("EX2"), 10, 10, TimeUnit.MICROSECONDS); ex3.scheduleAtFixedRate(new Task("EX3"), 10, 10, TimeUnit.MICROSECONDS); ex4.scheduleAtFixedRate(new Task("EX4"), 10, 10, TimeUnit.MICROSECONDS); ex5.scheduleAtFixedRate(new Task("EX5"), 10, 10, TimeUnit.MICROSECONDS); super.start(); } public void run() { try { while (true) { logger.debug("[MAIN] {}", new Date().getTime() - start); Thread.sleep(10); } } catch (InterruptedException e) { logger.info("[MAIN]: Interrupted: {}", e.getMessage()); } } public static void main(String[] args) { try { LBCORE63 main = new LBCORE63(); main.start(); } catch (JoranException e) { System.out.println("Failed to load application: " + e.getMessage()); } } class Task implements Runnable { private final Logger logger = LoggerFactory.getLogger(Task.class); //private final Logger logger_main = LoggerFactory.getLogger(LBCORE63.class); final String name; private final long start; int counter = 0; public long diff; public Task(final String name) { this.name = name; start = new Date().getTime(); } public void run() { counter++; diff = new Date().getTime() - start; logger.debug("counter={}", counter); //logger_main.debug("[MAIN] - [{}] {}", name, new Date().getTime() - start); } } }