1 /** 2 * Logback: the reliable, generic, fast and flexible logging framework. 3 * Copyright (C) 1999-2015, QOS.ch. All rights reserved. 4 * 5 * This program and the accompanying materials are dual-licensed under 6 * either the terms of the Eclipse Public License v1.0 as published by 7 * the Eclipse Foundation 8 * 9 * or (per the licensee's choosing) 10 * 11 * under the terms of the GNU Lesser General Public License version 2.1 12 * as published by the Free Software Foundation. 13 */ 14 package ch.qos.logback.classic.issue.lbclassic135; 15 16 import ch.qos.logback.classic.Logger; 17 import ch.qos.logback.classic.LoggerContext; 18 import ch.qos.logback.classic.encoder.PatternLayoutEncoder; 19 import ch.qos.logback.classic.spi.ILoggingEvent; 20 import ch.qos.logback.core.FileAppender; 21 import ch.qos.logback.core.contention.ThreadedThroughputCalculator; 22 23 /** 24 * Short sample code testing the throughput of a fair lock. 25 * 26 * @author Ceki Gulcu 27 */ 28 public class LoggingToFileThroughput { 29 30 static int THREAD_COUNT = 1; 31 static long OVERALL_DURATION_IN_MILLIS = 5000; 32 33 public static void main(String args[]) throws InterruptedException { 34 35 ThreadedThroughputCalculator tp = new ThreadedThroughputCalculator(OVERALL_DURATION_IN_MILLIS); 36 tp.printEnvironmentInfo("lbclassic135 LoggingToFileThrouhput"); 37 38 LoggerContext lc = new LoggerContext(); 39 Logger logger = buildLoggerContext(lc); 40 41 for (int i = 0; i < 2; i++) { 42 tp.execute(buildArray(logger)); 43 } 44 45 tp.execute(buildArray(logger)); 46 tp.printThroughput("File: "); 47 lc.stop(); 48 } 49 50 static Logger buildLoggerContext(LoggerContext lc) { 51 Logger root = lc.getLogger(Logger.ROOT_LOGGER_NAME); 52 53 PatternLayoutEncoder patternLayout = new PatternLayoutEncoder(); 54 patternLayout.setContext(lc); 55 patternLayout.setPattern("%d %l [%t] - %msg%n"); 56 patternLayout.start(); 57 FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>(); 58 fileAppender.setContext(lc); 59 fileAppender.setFile("target/lbclassic135.log"); 60 fileAppender.setEncoder(patternLayout); 61 fileAppender.setAppend(false); 62 fileAppender.start(); 63 root.addAppender(fileAppender); 64 return lc.getLogger(LoggingToFileThroughput.class); 65 } 66 67 static LoggingRunnable[] buildArray(Logger logger) { 68 69 LoggingRunnable[] array = new LoggingRunnable[THREAD_COUNT]; 70 for (int i = 0; i < THREAD_COUNT; i++) { 71 array[i] = new LoggingRunnable(logger); 72 } 73 return array; 74 } 75 } 76 77 // === lbclassic135 LoggingToFileThrouhput === 78 // ******** 10 Threads ***** 79 // synchronized doAppend() method 80 // 81 // java.runtime.version = 1.6.0_05-b13 82 // java.vendor = Sun Microsystems Inc. 83 // os.name = Windows XP 84 // 85 // Threads 1: total of 485077 operations, or 97 operations per millisecond 86 // Threads 10: total of 309402 operations, or 61 operations per millisecond 87 88 // * After revision 2310 89 // * Threads 1: total of 462465 operations, or 92 operations per millisecond 90 // * Threads 10: total of 243362 operations, or 48 operations per millisecond 91 92 // ==================== Linux ======================== 93 94 // java.runtime.version = 1.6.0_11-b03 95 // java.vendor = Sun Microsystems Inc. 96 // os.name = Linux 97 // os.version = 2.6.25-gentoo-r6 98 // Threads 1: total of 356355 operations, or 71 operations per millisecond 99 // Threads 10: total of 287943 operations, or 57 operations per millisecond 100 101 // * After revision 2310 102 // * Threads 1: total of 331494 operations, or 66 operations per millisecond 103 // * Threads 10: total of 311104 operations, or 58 operations per millisecond 104 105 // java.runtime.version = jvmxa6460-20081105_25433 106 // java.vendor = IBM Corporation 107 // java.version = 1.6.0 108 // os.name = Linux 109 // os.version = 2.6.25-gentoo-r6 110 // Threads 1: total of 280381 operations, or 56 operations per millisecond 111 // Threads 10 total of 142989 operations, or 28 operations per millisecond 112 113 // * After revision 2310 114 // * Threads 1: total of 305638 operations, or 61 operations per millisecond 115 // * Threads 10: total of 147660 operations, or 29 operations per millisecond