/******************************************************************************* * Software Name : RCS IMS Stack * * Copyright (C) 2010 France Telecom S.A. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.orangelabs.rcs.utils.logger; import com.orangelabs.rcs.platform.logger.AndroidAppender; /** * Logger * * @author jexa7410 */ public class Logger { /** * Trace ON */ public static final boolean TRACE_ON = true; /** * Trace OFF */ public static final boolean TRACE_OFF = false; /** * DEBUG level */ public static final int DEBUG_LEVEL = 0; /** * INFO level */ public static final int INFO_LEVEL = 1; /** * WARN level */ public static final int WARN_LEVEL = 2; /** * ERROR level */ public static final int ERROR_LEVEL = 3; /** * FATAL level */ public static final int FATAL_LEVEL = 4; /** * Trace flag */ public static boolean activationFlag = TRACE_ON; /** * Trace level */ public static int traceLevel = DEBUG_LEVEL; /** * List of appenders */ private static Appender[] appenders = new Appender[] { new AndroidAppender() }; /** * Classname */ private String classname; /** * Constructor * * @param classname Classname */ private Logger(String classname) { int index = classname.lastIndexOf('.'); if (index != -1) { this.classname = classname.substring(index+1); } else { this.classname = classname; } } /** * Is logger activated * * @return boolean */ public boolean isActivated() { return (activationFlag == TRACE_ON); } /** * Debug trace * * @param trace Trace */ public void debug(String trace) { printTrace(trace, DEBUG_LEVEL); } /** * Info trace * * @param trace Trace */ public void info(String trace) { printTrace(trace, INFO_LEVEL); } /** * Warning trace * * @param trace Trace */ public void warn(String trace) { printTrace(trace, WARN_LEVEL); } /** * Error trace * * @param trace Trace */ public void error(String trace) { printTrace(trace, ERROR_LEVEL); } /** * Error trace * * @param trace Trace * @param e Exception */ public void error(String trace, Throwable e) { printTrace(trace, ERROR_LEVEL); e.printStackTrace(); } /** * Fatal trace * * @param trace Trace */ public void fatal(String trace) { printTrace(trace, FATAL_LEVEL); } /** * Fatal trace * * @param trace Trace * @param e Exception */ public void fatal(String trace, Throwable e) { printTrace(trace, FATAL_LEVEL); e.printStackTrace(); } /** * Print a trace * * @param trace Trace * @param level Trace level */ private void printTrace(String trace, int level) { if ((appenders != null) && (level >= traceLevel)) { for(int i=0; i < appenders.length; i++) { appenders[i].printTrace(classname, level, trace); } } } /** * Set the list of appenders * * @param appenders List of appenders */ public static void setAppenders(Appender[] appenders) { Logger.appenders = appenders; } /** * Create a static instance * * @param classname Classname * @return Instance */ public static synchronized Logger getLogger(String classname) { return new Logger(classname); } /** * Get the current appenders * * @return Array of appender */ public static synchronized Appender[] getAppenders() { return appenders; } }