/*******************************************************************************
* Copyright 2012 Pradeep Nambiar, Pexus LLC
*
* Source File: src/org/perf/log/logger/LoggerImpl.java
*
* 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 org.perf.log.logger;
import java.util.logging.*;
import org.perf.log.context.PerfLogContextHelper;
import org.perf.log.properties.LoggerProperties;
public class LoggerImpl implements Logger {
// Create a java.util.logggin.Logger
// This can be used to leverage J2EE container log level control e.g. in WebSphere
private static java.util.logging.Logger JDKLogger = null;
private void initJDKLogger() {
if(JDKLogger == null) {
JDKLogger = java.util.logging.Logger.getLogger(this.getClass().getName());
// initialize level from properties file
// If running in WAS, subsequently the levels can be changed from WAS console if required
// Navigate to Troubleshooting -> Logs and Traces -> <server> and Change Log Level Details
// and look for org.perf.log.logger.LoggerImpl
setErrorEnabled(LoggerProperties.getInstance().isLoggerImplErrorEnabled());
setWarnEnabled(LoggerProperties.getInstance().isLoggerImplWarnEnabled());
setInfoEnabled(LoggerProperties.getInstance().isLoggerImplInfoEnabled());
setTraceEnabled(LoggerProperties.getInstance().isLoggerImplTraceEnabled());
setDebugEnabled(LoggerProperties.getInstance().isLoggerImplDebugEnabled());
JDKLogger.setUseParentHandlers(false);
}
}
public LoggerImpl() {
super();
initJDKLogger();
}
private static String INFO_STR = "INFO";
private static String WARN_STR = "WARN";
private static String ERROR_STR = "ERROR";
private static String DEBUG_STR = "DEBUG";
private static String TRACE_STR = "TRACE";
public LoggerImpl(String loggerName) {
super();
initJDKLogger();
this.loggerName = loggerName;
}
String loggerName;
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
//private static final String LINE_SEPARATOR = "\n";
@Override
public void debug(String msg) {
if(getDebugEnabled())
log(DEBUG_STR, msg,null);
}
@Override
public void debug(String msg, Throwable t) {
if(getDebugEnabled())
log(DEBUG_STR, msg,t);
}
@Override
public void error(String msg) {
if(getErrorEnabled())
log(ERROR_STR, msg,null);
}
@Override
public void error(String msg, Throwable t) {
if(getErrorEnabled())
log(ERROR_STR, msg,t);
}
@Override
public void info(String msg) {
if(getInfoEnabled())
log(INFO_STR, msg,null);
}
@Override
public void info(String msg, Throwable t) {
if(getInfoEnabled())
log(INFO_STR, msg,t);
}
@Override
public void trace(String msg) {
if(getTraceEnabled())
log(TRACE_STR, msg,null);
}
@Override
public void trace(String msg, Throwable t) {
if(getTraceEnabled())
log(TRACE_STR, msg,t);
}
@Override
public void warn(String msg) {
if(getWarnEnabled())
log(WARN_STR, msg,null);
}
@Override
public void warn(String msg, Throwable t) {
if(getWarnEnabled())
log(WARN_STR, msg,t);
}
/**
* This is our internal implementation for logging regular (non-parameterized)
* log messages.
*
* @param level
* @param message
* @param t
*/
private void log(String level, String message, Throwable t) {
StringBuffer buf = new StringBuffer();
buf.append(level);
buf.append(" ");
buf.append(loggerName);
buf.append(" - ");
buf.append(PerfLogContextHelper.getBaseAndInfoContextString());
buf.append(message);
buf.append(LINE_SEPARATOR);
System.out.print(buf.toString());
if (t != null) {
t.printStackTrace(System.out);
}
System.out.flush();
}
@Override
public String getLoggerName() {
return loggerName;
}
@Override
public void setLoggerName(String loggerName) {
this.loggerName = loggerName;
}
@Override
public boolean getDebugEnabled() {
// this property can also change dynamically either via cell persistent name space binding
// or via the Log / Tracing flags for a specific server from WAS console.
if(LoggerProperties.getInstance().isLoggerImplDebugEnabled())
return true;
else
if(JDKLogger != null && JDKLogger.isLoggable(Level.FINEST))
return true;
else
return false;
}
@Override
public boolean getErrorEnabled() {
if(JDKLogger != null && JDKLogger.isLoggable(Level.SEVERE))
return true;
else
return false;
}
@Override
public boolean getInfoEnabled() {
if(JDKLogger != null && JDKLogger.isLoggable(Level.INFO))
return true;
else
return false;
}
@Override
public boolean getTraceEnabled() {
if(JDKLogger != null && JDKLogger.isLoggable(Level.FINER))
return true;
else
return false;
}
@Override
public boolean getWarnEnabled() {
if(JDKLogger != null && JDKLogger.isLoggable(Level.WARNING))
return true;
else
return false;
}
@Override
public void setErrorEnabled(boolean errorEnabled) {
if(JDKLogger != null && errorEnabled)
JDKLogger.setLevel(Level.SEVERE);
}
@Override
public void setInfoEnabled(boolean infoEnabled) {
if(JDKLogger != null && infoEnabled)
JDKLogger.setLevel(Level.INFO);
}
@Override
public void setTraceEnabled(boolean traceEnabled) {
if(JDKLogger != null && traceEnabled)
JDKLogger.setLevel(Level.FINER);
}
@Override
public void setWarnEnabled(boolean warnEnabled) {
if(JDKLogger != null && warnEnabled)
JDKLogger.setLevel(Level.WARNING);
}
@Override
public void setDebugEnabled(boolean debugEnabled) {
if(JDKLogger != null && debugEnabled)
JDKLogger.setLevel(Level.FINEST);
}
}