hydrograph.ui.joblogger.JobLogger.java Source code

Java tutorial

Introduction

Here is the source code for hydrograph.ui.joblogger.JobLogger.java

Source

/*******************************************************************************
 * Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
 * 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 hydrograph.ui.joblogger;

import hydrograph.ui.joblogger.logger.AbstractJobLogger;
import hydrograph.ui.joblogger.logger.ConsoleLogger;
import hydrograph.ui.joblogger.logger.FileLogger;
import hydrograph.ui.joblogger.utils.JobLoggerUtils;
import hydrograph.ui.logging.factory.LogFactory;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;

/**
 * The Class JobLogger.
 * <p>
 * Manages Job logging. Job logs will be displayed in console as well as written in the log file. For each job run, it
 * will log system information of the client machine.
 * 
 * @author Bitwise
 */
public class JobLogger {
    private static final Logger logger = LogFactory.INSTANCE.getLogger(JobLogger.class);

    private static final String EXECUTION_TRACKING_LOG_FILE_EXTENTION = ".track.log";
    private List<AbstractJobLogger> loggers;

    private String projectName;
    private String jobName;
    private String jobRunId;

    public JobLogger(String projectName, String jobName, String jobRunId) {
        this.projectName = projectName;
        this.jobName = jobName;
        this.jobRunId = jobRunId;
        registerLoggers();
        logger.debug("Registered all loggers");
    }

    private void registerLoggers() {
        loggers = new ArrayList<>();
        loggers.add(new FileLogger(projectName, jobName, jobRunId));
        logger.debug("Registred file logger");
        loggers.add(new ConsoleLogger(projectName, jobName));
        logger.debug("Registered Console logger");
    }

    /**
     * 
     * log system information
     * 
     */
    public void logSystemInformation() {
        for (AbstractJobLogger jobLogger : loggers) {
            jobLogger.logWithNoTimeStamp("System Properties: ");

            logSystemProperties(jobLogger);
            logRuntimeInformation(jobLogger);

            jobLogger.logWithNoTimeStamp("--------------------------------------------\n");

            logger.debug("Logged System information on {}", jobLogger.getClass().getName());
        }

    }

    /**
     * 
     * Logs runtime properties
     * 
     * @param jobLogger
     */
    private void logRuntimeInformation(AbstractJobLogger jobLogger) {
        Runtime runtime = Runtime.getRuntime();
        long maxMemory = runtime.maxMemory();
        jobLogger.logWithNoTimeStamp("Max Memory: " + Long.toString(maxMemory / 1024));
        long allocatedMemory = runtime.totalMemory();
        jobLogger.logWithNoTimeStamp("Allocated Memory:  " + Long.toString(allocatedMemory / 1024));
        long freeMemory = runtime.freeMemory();
        jobLogger.logWithNoTimeStamp("Free Memory: " + Long.toString(freeMemory / 1024));
        jobLogger.logWithNoTimeStamp(
                "Total free memory: " + Long.toString((freeMemory + (maxMemory - allocatedMemory)) / 1024));
        long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
        jobLogger.logWithNoTimeStamp("Used Memory : " + Long.toString(used));
    }

    /**
     * Log system properties
     * 
     * @param jobLogger
     */
    private void logSystemProperties(AbstractJobLogger jobLogger) {
        jobLogger.logWithNoTimeStamp("Operating System : " + System.getProperty("os.name"));
        jobLogger.logWithNoTimeStamp("JVM : " + System.getProperty("java.vm.name"));
        jobLogger.logWithNoTimeStamp(
                "Java specification version : " + System.getProperty("java.specification.version"));
        jobLogger.logWithNoTimeStamp("Java Version : " + System.getProperty("java.version"));
        jobLogger.logWithNoTimeStamp("Osgi OS : " + System.getProperty("osgi.os"));
        jobLogger.logWithNoTimeStamp("Operating System Version : " + System.getProperty("os.version"));
        jobLogger.logWithNoTimeStamp("Operating System Architecture : " + System.getProperty("os.arch"));
    }

    /**
     * 
     * log message
     * 
     * @param message
     */
    public void logMessage(String message) {
        for (AbstractJobLogger jobLogger : loggers) {
            if (StringUtils.isNotBlank(message)) {
                message = StringUtils.trim(message);
                jobLogger.log(message);
            }
            logger.debug("Logged message {} on {}", message, jobLogger.getClass().getName());
        }
    }

    /**
     * 
     * Log job start information
     * 
     */
    public void logJobStartInfo(String jobRunId) {
        for (AbstractJobLogger jobLogger : loggers) {
            jobLogger.logWithNoTimeStamp("====================================================================");
            jobLogger.logWithNoTimeStamp("Job Start Timestamp: " + JobLoggerUtils.getTimeStamp());
            jobLogger.logWithNoTimeStamp("Job Name: " + jobLogger.getFullJobName());
            jobLogger.logWithNoTimeStamp("Job Id: " + getJobId(jobRunId));
            jobLogger.logWithNoTimeStamp("Run Id: " + jobRunId);
            jobLogger.logWithNoTimeStamp("====================================================================");

            logger.debug("Logged job start info on {}", jobLogger.getClass().getName());
        }
    }

    /**
     * 
     * Log job end information
     * 
     */
    public void logJobEndInfo(String jobRunId, String trackingFilePath) {
        for (AbstractJobLogger jobLogger : loggers) {
            jobLogger.logWithNoTimeStamp("====================================================================");
            jobLogger.logWithNoTimeStamp("Job End Timestamp: " + JobLoggerUtils.getTimeStamp());
            jobLogger.logWithNoTimeStamp("Job Name: " + jobLogger.getFullJobName());
            if (StringUtils.isNotBlank(trackingFilePath)) {
                jobLogger.logWithNoTimeStamp("Job Tracking log File on local: " + trackingFilePath + jobRunId
                        + EXECUTION_TRACKING_LOG_FILE_EXTENTION);
            }
            jobLogger.logWithNoTimeStamp("Job Id: " + getJobId(jobRunId));
            jobLogger.logWithNoTimeStamp("Run Id: " + jobRunId);
            jobLogger.logWithNoTimeStamp("====================================================================");
            jobLogger.logWithNoTimeStamp("\n\n");

            logger.debug("Logged job end info on {}", jobLogger.getClass().getName());
        }
    }

    /**
     * @param jobRunId
     * @return Job Id
     */
    private String getJobId(String jobRunId) {
        String id[] = jobRunId.split("_");
        jobRunId = id[0];
        for (int i = 1; i < id.length - 1; i++) {
            jobRunId = jobRunId + "_" + id[i];
        }
        return jobRunId;
    }

    /**
     * Release used resources
     * 
     */
    public void close() {
        for (AbstractJobLogger jobLogger : loggers) {
            jobLogger.close();
            logger.debug("Closed logger - {}", jobLogger.getClass().getName());
        }
    }
}