/**
* 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 org.apache.log4j.Hierarchy;
import org.apache.log4j.spi.RootLogger;
//import org.slf4j.impl.JDK14LoggerFactory;
import ch.qos.logback.classic.HLogger;
import ch.qos.logback.classic.HLoggerContext;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.control.ControlLogger;
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;
public class SpeedOfDisabledDebug {
static LoggerContext loggerContext = new LoggerContext();
static HLoggerContext hashLoggerContext = new HLoggerContext();
static ControlLoggerContext controlContext = new ControlLoggerContext();
static Hierarchy log4jHierarchy = new Hierarchy(new RootLogger(org.apache.log4j.Level.OFF));
//static JDK14LoggerFactory jdk14FA = new JDK14LoggerFactory();
static String loggerName;
public static void main(String[] args) throws IOException {
loggerContext.getLogger(LoggerContext.ROOT_NAME).setLevel(Level.OFF);
hashLoggerContext.getRootLogger().setLevel(Level.OFF);
controlContext.getRootLogger().setLevel(Level.OFF);
//LogManager
//jdk14FA.getLogger("").setLevel(java.util.logging.Level.OFF);
Scenario s = ScenarioMaker.makeTypeBScenario(1000);
loggerName = ((CreateLogger) s.get(1000)).getLoggerName();
System.out.println("Logger name is "+loggerName);
final org.slf4j.Logger slf4jLogger = loggerContext.getLogger(loggerName);
final HLogger hashLogger = hashLoggerContext.getLogger(loggerName);
final ControlLogger controlLogger = controlContext.getLogger(loggerName);
//final org.apache.log4j.Logger log4jLogger = log4jHierarchy.getLogger(loggerName);
//final java.util.logging.Logger jdk14Logger = java.util.logging.Logger.getLogger(loggerName);
int x1 = 1000*1000;
for (int i = 0; i < 2; i++) {
x1 *= 2;
System.out.println("======= len=" + x1);
speedTestSLF4JLogger(hashLogger, x1, "Hash logger ");
speedTestSLF4JLogger(slf4jLogger, x1, "Logback logger ");
speedTestSLF4JLogger(controlLogger, x1, "Control logger ");
//speedTestSLF4JLogger(log4jLogger, x1, "Log4j logger ");
//speedTestSLF4JLogger(jdk14Logger, x1, "JDK14 Logger ");
speedTestHashLogger(x1);
speedTestListLogger(x1);
speedTestControlLogger(x1);
speedTestLOG4JLogger(x1);
speedTestJULLogger(x1);
}
}
static void speedTestSLF4JLogger(final org.slf4j.Logger logger, final int len, String loggerType) {
logger.debug("some message");
long start = System.nanoTime();
for (int i = 0; i < len; i++) {
logger.debug("some message");
}
long result = System.nanoTime() - start;
System.out.println(("SLF4J: " + loggerType) + (result / len));
}
static void speedTestListLogger(final int len) {
final Logger logger = loggerContext.getLogger(loggerName);
long start = System.nanoTime();
for (int i = 0; i < len; i++) {
logger.debug("some message");
}
long result = System.nanoTime() - start;
System.out.println("DIRECT logback logger: " + (result / len));
}
static void speedTestHashLogger(final int len) {
final HLogger logger = hashLoggerContext.getLogger(loggerName);
long start = System.nanoTime();
for (int i = 0; i < len; i++) {
logger.debug("some message");
}
long result = System.nanoTime() - start;
System.out.println("DIRECT Hash logger: " + (result / len));
}
static void speedTestLOG4JLogger(final int len) {
final org.apache.log4j.Logger logger = log4jHierarchy.getLogger(loggerName);
log4jHierarchy.getLogger("xgssmieubdshsdty");
log4jHierarchy.getLogger("xgssmieubdshsdty.aqvdsmxzraszxybtrcslsvatbvswq");
log4jHierarchy.getLogger("xgssmieubdshsdty.aqvdsmxzraszxybtrcslsvatbvswq.yvchlwo");
log4jHierarchy.getLogger("xgssmieubdshsdty.aqvdsmxzraszxybtrcslsvatbvswq.yvchlwo.xlmoezu");
long start = System.nanoTime();
for (int i = 0; i < len; i++) {
logger.debug("some message");
}
long result = System.nanoTime() - start;
System.out.println("DIRECT LOG4J logger " + result / len);
}
static void speedTestJULLogger(final int len) {
final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(loggerName);
final java.util.logging.Logger root = java.util.logging.Logger.getLogger("");
root.setLevel(java.util.logging.Level.OFF);
long start = System.nanoTime();
for (int i = 0; i < len; i++) {
logger.fine("some message");
}
long result = System.nanoTime() - start;
System.out.println("DIRECT JUL logger " + result / len);
}
static void speedTestControlLogger(final int len) {
final ControlLogger logger = controlContext.getLogger(loggerName);
long start = System.nanoTime();
for (int i = 0; i < len; i++) {
logger.debug("some message");
}
long result = System.nanoTime() - start;
System.out.println("DIRECT Control logger: " + result / len);
}
}