blob: ced8e5fc225b5ca19139094f764f68c0b23a66c8 [file] [log] [blame]
/*
* =========================================================================
* Copyright (c) 2012-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
* ========================================================================
*/
package com.vmware.gemfire.tools.pulse.internal.log;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.vmware.gemfire.tools.pulse.internal.data.PulseConfig;
import com.vmware.gemfire.tools.pulse.internal.data.Repository;
import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
import com.vmware.gemfire.tools.pulse.internal.log.MessageFormatter;
/**
* Class PulseLogWriter
*
* PulseLogWriter is the implementation of LogWriter.
*
* @author Sachin K
* @since 7.0.1
*
*/
public class PulseLogWriter implements LogWriter {
// Log File handle Object
private FileHandler fileHandler;
// Message Formatter Object
private static MessageFormatter messageformatter;
// pulse log writer
private static PulseLogWriter pulseLogger = null;
// Logger Object
private Logger logger;
private PulseLogWriter() {
PulseConfig pulseConfig = Repository.get().getPulseConfig();
// Create Logger
logger = Logger.getLogger(this.getClass().getName());
// Set minimum log level to level passed
logger.setLevel(pulseConfig.getLogLevel());
try {
// Get file handler to log messages into log file.
if (fileHandler == null) {
fileHandler = new FileHandler(
pulseConfig.getLogFileFullName(),
pulseConfig.getLogFileSize(),
pulseConfig.getLogFileCount(),
pulseConfig.getLogAppend());
// Log Message Formatter
messageformatter = new MessageFormatter();
fileHandler.setFormatter(messageformatter);
}
// Remove any existing handlers
// e.g. consoleHandler
logger.setUseParentHandlers(false);
// Add File Handler to logger object
logger.addHandler(fileHandler);
} catch (SecurityException e) {
logger.setUseParentHandlers(true);
e.printStackTrace();
} catch (IOException e) {
logger.setUseParentHandlers(true);
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param jsonErr
* @param errorData
*/
public void logJSONError(JSONException jsonErr, Object errorData) {
// print details of thrown exception and data that couldn't be converted to
// json
if (this.fineEnabled()) {
// write errors
StringWriter swBuffer = new StringWriter();
PrintWriter prtWriter = new PrintWriter(swBuffer);
jsonErr.printStackTrace(prtWriter);
this.fine("JSON Error Details : " + swBuffer.toString() + "\n");
this.fine("Erroneous Data : "
+ ((errorData != null) ? errorData.toString()
: "Not Available for output") + "\n");
}
}
public static synchronized PulseLogWriter getLogger() {
if (null == pulseLogger) {
pulseLogger = new PulseLogWriter();
}
return pulseLogger;
}
@Override
public boolean severeEnabled() {
return logger.isLoggable(Level.SEVERE);
}
@Override
public void severe(String msg, Throwable ex) {
logger.logp(Level.SEVERE, "", "", msg, ex);
}
@Override
public void severe(String msg) {
logger.severe(msg);
}
@Override
public void severe(Throwable ex) {
logger.logp(Level.SEVERE, "", "", "", ex);
}
/*
@Override
public boolean errorEnabled() {
// TODO Auto-generated method stub
return false;
}
@Override
public void error(String msg, Throwable ex) {
// TODO Auto-generated method stub
}
@Override
public void error(String msg) {
// TODO Auto-generated method stub
}
@Override
public void error(Throwable ex) {
// TODO Auto-generated method stub
}
*/
@Override
public boolean warningEnabled() {
return logger.isLoggable(Level.WARNING);
}
@Override
public void warning(String msg, Throwable ex) {
logger.logp(Level.WARNING, "", "", msg, ex);
}
@Override
public void warning(String msg) {
logger.warning(msg);
}
@Override
public void warning(Throwable ex) {
logger.logp(Level.WARNING, "", "", "", ex);
}
@Override
public boolean infoEnabled() {
return logger.isLoggable(Level.INFO);
}
@Override
public void info(String msg, Throwable ex) {
logger.logp(Level.INFO, "", "", msg, ex);
}
@Override
public void info(String msg) {
logger.info(msg);
}
@Override
public void info(Throwable ex) {
logger.logp(Level.WARNING, "", "", "", ex);
}
@Override
public boolean configEnabled() {
return logger.isLoggable(Level.CONFIG);
}
@Override
public void config(String msg, Throwable ex) {
logger.logp(Level.CONFIG, "", "", msg, ex);
}
@Override
public void config(String msg) {
logger.config(msg);
}
@Override
public void config(Throwable ex) {
logger.logp(Level.CONFIG, "", "", "", ex);
}
@Override
public boolean fineEnabled() {
return logger.isLoggable(Level.FINE);
}
@Override
public void fine(String msg, Throwable ex) {
logger.logp(Level.FINE, "", "", msg, ex);
}
@Override
public void fine(String msg) {
logger.fine(msg);
}
@Override
public void fine(Throwable ex) {
logger.logp(Level.FINE, "", "", "", ex);
}
@Override
public boolean finerEnabled() {
return logger.isLoggable(Level.FINER);
}
@Override
public void finer(String msg, Throwable ex) {
logger.logp(Level.FINER, "", "", msg, ex);
}
@Override
public void finer(String msg) {
logger.finer(msg);
}
@Override
public void finer(Throwable ex) {
logger.logp(Level.FINER, "", "", "", ex);
}
@Override
public void entering(String sourceClass, String sourceMethod) {
logger.entering(sourceClass, sourceMethod);
}
@Override
public void exiting(String sourceClass, String sourceMethod) {
logger.exiting(sourceClass, sourceMethod);
}
@Override
public void throwing(String sourceClass, String sourceMethod, Throwable thrown) {
logger.throwing(sourceClass, sourceMethod, thrown);
}
@Override
public boolean finestEnabled() {
return logger.isLoggable(Level.FINEST);
}
@Override
public void finest(String msg, Throwable ex) {
logger.logp(Level.FINEST, "", "", msg, ex);
}
@Override
public void finest(String msg) {
logger.finest(msg);
}
@Override
public void finest(Throwable ex) {
logger.logp(Level.FINEST, "", "", "", ex);
}
}