/******************************************************************************* * Copyright (c) May 18, 2011 Zend Technologies Ltd. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.zend.sdkcli.internal.logger; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.zend.sdklib.logger.ILogger; /** * Implementation of {@link ILogger}. It provides log4j logging. * * @author Wojciech Galanciak, 2011 * */ public class CliLogger implements ILogger { private Logger logger; private boolean verbose; public CliLogger() { PropertyConfigurator.configure(getLogProperties()); } private Properties getLogProperties() { final InputStream stream = this.getClass().getResourceAsStream( "log4j.properties"); Properties p = new Properties(); try { p.load(stream); } catch (IOException e) { throw new IllegalStateException("Cannot load log4j.properties. " + "Please place it where the CliLogger is declared"); } return p; } private CliLogger(String creatorName) { this(); this.logger = Logger.getLogger(creatorName); } @Override public ILogger getLogger(String creatorName, boolean verbose) { this.verbose = verbose; return new CliLogger(creatorName); } @Override public void info(Object message) { printMessage(message); logger.info(message); } @Override public void error(Object message) { printMessage(message); logger.error(message); } @Override public void debug(Object message) { printVerbose(message); logger.debug(message); } @Override public void warning(Object message) { printVerbose(message); logger.warn(message); } private void printVerbose(Object message) { if (verbose) { printMessage(message); } } private void printMessage(Object message) { if (message instanceof String) { System.out.println(message); } else if (message instanceof Exception) { ((Exception) message).printStackTrace(System.out); } } }