com.agiletec.aps.system.ApsSystemUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.agiletec.aps.system.ApsSystemUtils.java

Source

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
* 
* See the file License for the specific language governing permissions   
* and limitations under the License
* 
* 
* 
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.aps.system;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.AsyncAppender;
import org.apache.log4j.LogManager;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Classe di utilit.
 * E' la classe detentrice del log di sistema.
 * @author E.Santoboni
 */
public class ApsSystemUtils {

    /**
     * Inizializzazione della classe di utilit.
     * @throws Exception
     */
    public void init() throws Exception {

        String appenderName = "ENTANDO";

        //TODO set this in constant
        String conversionPattern = (String) this._systemParams.get("log4jConversionPattern");
        if (StringUtils.isBlank(conversionPattern)) {
            conversionPattern = "%d{yyyy-MM-dd HH:mm:ss.SSS} - %-5p -  %c - %m%n"; //default conversionPattern
        }
        PatternLayout layout = new PatternLayout(conversionPattern);

        String maxFileSize = (String) this._systemParams.get(INIT_PROP_LOG_FILE_SIZE);
        if (StringUtils.isBlank(maxFileSize)) {
            maxFileSize = "1MB"; //default size
        } else {
            long mega = new Long(maxFileSize) / KILOBYTE;
            maxFileSize = mega + "KB";
        }
        String filename = (String) this._systemParams.get(INIT_PROP_LOG_FILE_PREFIX);
        int maxBackupIndex = Integer.parseInt((String) this._systemParams.get(INIT_PROP_LOG_FILES_COUNT));
        String log4jLevelString = (String) this._systemParams.get(INIT_PROP_LOG_LEVEL);
        if (StringUtils.isBlank(log4jLevelString)) {
            log4jLevelString = "INFO"; //default level
        }

        RollingFileAppender fileAppender = (RollingFileAppender) LogManager.getRootLogger()
                .getAppender(appenderName);
        if (null == fileAppender) {
            fileAppender = new RollingFileAppender();
            fileAppender.setName(appenderName);
        }
        fileAppender.setMaxBackupIndex(maxBackupIndex);
        fileAppender.setThreshold(org.apache.log4j.Level.toLevel(log4jLevelString));
        fileAppender.setLayout(layout);
        fileAppender.setMaxFileSize(maxFileSize);

        fileAppender.setFile(filename);
        fileAppender.activateOptions();

        AsyncAppender async = (AsyncAppender) LogManager.getRootLogger().getAppender("async");
        async.addAppender(fileAppender);
    }

    /**
     * Restituisce il logger di sistema.
     * @return Il logger
     */
    public static Logger getLogger() {
        return _logger;
    }

    /**
     * Traccia una eccezione sul logger del contesto. Se il livello di soglia
     * del logger  superiore a FINER, viene emesso solo un breve messaggio di
     * livello SEVERE, altrimenti viene tracciato anche lo stack trace della
     * eccezione (con il livello FINER).
     * @param t L'eccezione da tracciare
     * @param caller La classe chiamante, in cui si  verificato l'errore.
     * @param methodName Il metodo in cui si  verificato l'errore.
     * @param message Testo da includere nel tracciamento.
     */
    public static void logThrowable(Throwable t, Object caller, String methodName, String message) {
        String className = null;
        if (caller != null) {
            className = caller.getClass().getName();
        }
        _logger.error("{} in {}.{}", message, className, methodName, t);
    }

    /**
     * Traccia una eccezione sul logger del contesto. Se il livello di soglia
     * del logger  superiore a FINER, viene emesso solo un breve messaggio di
     * livello SEVERE, altrimenti viene tracciato anche lo stack trace della
     * eccezione (con il livello FINER).
     * @param t L'eccezione da tracciare
     * @param caller La classe chiamante, in cui si  verificato l'errore.
     * @param methodName Il metodo in cui si  verificato l'errore.
     */
    public static void logThrowable(Throwable t, Object caller, String methodName) {
        logThrowable(t, caller, methodName, "Exception");
    }

    /**
     * Setta la mappa dei parametri di inizializzazione.
     * @param systemParams I parametri di inizializzazione.
     */
    public void setSystemParams(Map<String, Object> systemParams) {
        this._systemParams = systemParams;
    }

    /**
     * Nome della property che definisce il nome
     * da assegnare al logger (tipo: String)
     */
    public static final String INIT_PROP_LOG_NAME = "logName";

    /**
     * Nome della property che definisce il path del file di log; il nome
     * completo del file sar ottenuto aggiungendo eventuale estensione
     * secondo le regole di java.util.logging.Logger. (tipo: String)
     */
    public static final String INIT_PROP_LOG_FILE_PREFIX = "logFilePrefix";

    /**
     * Nome della property che definisce il livello di log; utilizzare
     * uno dei nomi delle costanti di java.util.logging.Level. (tipo: String)
     */
    public static final String INIT_PROP_LOG_LEVEL = "logLevel";

    /**
     * Nome della property che definisce il size (in byte) del singolo file di log
     */
    public static final String INIT_PROP_LOG_FILE_SIZE = "logFileSize";

    /**
     * Nome della property che definisce numero di file per ciclo di log.
     */
    public static final String INIT_PROP_LOG_FILES_COUNT = "logFilesCount";

    /**
     * Logger di sistema.
     */
    private static final Logger _logger = LoggerFactory.getLogger(ApsSystemUtils.class);

    private Map<String, Object> _systemParams;

    private static final long KILOBYTE = 1024L;

}