/* * * Licensed to the Apache Software Foundation (ASF) under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional information regarding * copyright ownership. The ASF licenses this file to You 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.apache.geode.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 org.apache.geode.tools.pulse.internal.data.PulseConfig; import org.apache.geode.tools.pulse.internal.data.Repository; /** * Class PulseLogWriter * * PulseLogWriter is the implementation of LogWriter. * * @since GemFire 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); } // 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(Exception 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); } }