/**
* LOGBack: the reliable, fast and flexible logging library for Java.
*
* Copyright (C) 1999-2005, QOS.ch, LOGBack.com
*
* This library is free software, you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation.
*/
package ch.qos.logback.classic;
import java.io.IOException;
import java.util.List;
import org.apache.log4j.Hierarchy;
import org.apache.log4j.spi.RootLogger;
import ch.qos.logback.classic.HLoggerContext;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.control.ControlLoggerContext;
import ch.qos.logback.classic.control.CreateLogger;
import ch.qos.logback.classic.control.Scenario;
import ch.qos.logback.classic.control.ScenarioMaker;
import ch.qos.logback.classic.control.TestAction;
public class LoggerCreation {
static LoggerContext listLoggerContext = new LoggerContext();
static HLoggerContext hashLoggerContext = new HLoggerContext();
static ControlLoggerContext controlContext = new ControlLoggerContext();
static Hierarchy log4jHierarchy = new Hierarchy(new RootLogger(org.apache.log4j.Level.OFF));
public static void main(String[] args) throws IOException, InterruptedException {
Scenario s = ScenarioMaker.makeTypeBScenario(3000);
System.err.print("Press a key to continue: ");
System.in.read();
testEmptyLoggers(s);
testListLoggers(s);
testJULLoggers(s);
tesLOG4JLoggers(s);
testControlLoggers(s);
testHashLoggers(s);
}
static void testEmptyLoggers(Scenario s) {
List actionList = s.getActionList();
int size = actionList.size();
long start = System.nanoTime();
CreateLogger cl = null;
for (int i = 0; i < size; i++) {
TestAction action = (TestAction) actionList.get(i);
if (action instanceof CreateLogger) {
cl = (CreateLogger) action;
}
}
if(cl == null) {
// bogus if block to keep eclipse happy
}
long result = System.nanoTime() - start;
System.out.println("Average (in nanos) Emtpy logger creation: " + (result / s.size()));
}
static void testListLoggers(Scenario s) {
List actionList = s.getActionList();
int size = actionList.size();
long start = System.nanoTime();
for (int i = 0; i < size; i++) {
TestAction action = (TestAction) actionList.get(i);
if (action instanceof CreateLogger) {
CreateLogger cl = (CreateLogger) action;
listLoggerContext.getLogger(cl.getLoggerName());
}
}
long result = System.nanoTime() - start;
System.out.println("Average (in nanos) List logger creation: " + (result / s.size()));
}
static void testHashLoggers(Scenario s) {
List actionList = s.getActionList();
int size = actionList.size();
long start = System.nanoTime();
for (int i = 0; i < size; i++) {
TestAction action = (TestAction) actionList.get(i);
if (action instanceof CreateLogger) {
CreateLogger cl = (CreateLogger) action;
hashLoggerContext.getLogger(cl.getLoggerName());
}
}
long result = System.nanoTime() - start;
System.out.println("Average (in nanos) Hash logger creation: " + (result / s.size()));
}
static void testControlLoggers(Scenario s) {
List actionList = s.getActionList();
int size = actionList.size();
long start = System.nanoTime();
for (int i = 0; i < size; i++) {
TestAction action = (TestAction) actionList.get(i);
if (action instanceof CreateLogger) {
CreateLogger cl = (CreateLogger) action;
controlContext.getLogger(cl.getLoggerName());
}
}
long result = System.nanoTime() - start;
System.out.println("Average (in nanos) Control logger creation: " + (result / s.size()));
}
static void tesLOG4JLoggers(Scenario s) {
List actionList = s.getActionList();
int size = actionList.size();
long start = System.nanoTime();
for (int i = 0; i < size; i++) {
TestAction action = (TestAction) actionList.get(i);
if (action instanceof CreateLogger) {
CreateLogger cl = (CreateLogger) action;
log4jHierarchy.getLogger(cl.getLoggerName());
}
}
long result = System.nanoTime() - start;
System.out.println("Average (in nanos) LOG4J logger creation: " + (result / s.size()));
}
static void testJULLoggers(Scenario s) {
List actionList = s.getActionList();
int size = actionList.size();
long start = System.nanoTime();
for (int i = 0; i < size; i++) {
TestAction action = (TestAction) actionList.get(i);
if (action instanceof CreateLogger) {
CreateLogger cl = (CreateLogger) action;
java.util.logging.Logger.getLogger(cl.getLoggerName());
}
}
long result = System.nanoTime() - start;
System.out.println("Average (in nanos) JUL logger creation: " + (result / s.size()));
}
}