/* * Copyright (C) 2011 Laurent Caillette * * This program 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, either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.novelang.logger; /** * Useful things for implementing concrete {@link Logger}s. * * @author Laurent Caillette */ /*package*/ abstract class AbstractLogger implements Logger { protected abstract void log( Level level, String message, Throwable throwable ) ; // ============================== // Single-string message building // ============================== private static String buildMessage( final String message, final Object... messageObjects ) { final StringBuilder stringBuilder = new StringBuilder( ) ; if( message == null ) { stringBuilder.append( "<null>" ) ; } else { stringBuilder.append( message ) ; } add( stringBuilder, messageObjects ) ; return stringBuilder.toString() ; } private static String buildMessage( final Object... messageObjects ) { final StringBuilder stringBuilder = new StringBuilder( ) ; add( stringBuilder, messageObjects ) ; return stringBuilder.toString() ; } private static void add( final StringBuilder stringBuilder, final Object... messageObjects ) { for( final Object messageObject : messageObjects ) { if( messageObject == null ) { stringBuilder.append( "<null>" ) ; } else { stringBuilder.append( messageObject.toString() ) ; } } } // ============== // Logger methods // ============== @Override public void trace( final String message ) { log( Level.TRACE, message, null ) ; } @Override public void trace( final String message, final Object... messageObjects ) { log( Level.TRACE, buildMessage( message, messageObjects ), null ) ; } @Override public void trace( final Throwable throwable, final Object... messageObjects ) { log( Level.TRACE, buildMessage( messageObjects ), throwable ) ; } @Override public void debug( final String message ) { log( Level.DEBUG, message, null ) ; } @Override public void debug( final String message, final Object... messageObjects ) { log( Level.DEBUG, buildMessage( message, messageObjects ), null ) ; } @Override public void debug( final Throwable throwable, final Object... messageObjects ) { log( Level.DEBUG, buildMessage( messageObjects ), throwable ) ; } @Override public void info( final String message ) { log( Level.INFO, message, null ) ; } @Override public void info( final String message, final Object... messageObjects ) { log( Level.INFO, buildMessage( message, messageObjects ), null ) ; } @Override public void info( final Throwable throwable, final Object... messageObjects ) { log( Level.INFO, buildMessage( messageObjects ), throwable ) ; } @Override public void warn( final String message ) { log( Level.WARN, message, null ) ; } @Override public void warn( final String message, final Object... messageObjects ) { log( Level.WARN, buildMessage( message, messageObjects ), null ) ; } @Override public void warn( final Throwable throwable, final Object... messageObjects ) { log( Level.WARN, buildMessage( messageObjects ), throwable ) ; } @Override public void error( final String message ) { log( Level.ERROR, message, null ) ; } @Override public void error( final String message, final Object... messageObjects ) { log( Level.ERROR, buildMessage( message, messageObjects ), null ) ; } @Override public void error( final Throwable throwable, final Object... messageObjects ) { log( Level.ERROR, buildMessage( messageObjects ), throwable ) ; } }