/* * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * * This file is part of jAPS software. * jAPS 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 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * */ package com.agiletec.aps.system; import java.util.Map; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; /** * 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 { Level logLevel = Level.INFO; try { String logName = (String) this._systemParams.get(INIT_PROP_LOG_NAME); _logger = Logger.getLogger(logName); String pattern = (String) this._systemParams.get(INIT_PROP_LOG_FILE_PREFIX); if (pattern != null && !pattern.equals("")) { _logger.setUseParentHandlers(false); pattern = pattern + ".%g"; // Esempio: "c:/dir/nome%g.log"; int limit = Integer.parseInt((String) this._systemParams.get(INIT_PROP_LOG_FILE_SIZE)); int count = Integer.parseInt((String) this._systemParams.get(INIT_PROP_LOG_FILES_COUNT)); FileHandler handler = new FileHandler(pattern, limit, count); handler.setFormatter(new SimpleFormatter()); handler.setEncoding("UTF-8"); _logger.addHandler(handler); } String levelString = (String) this._systemParams.get(INIT_PROP_LOG_LEVEL); logLevel = Level.parse(levelString); _logger.setLevel(logLevel); } catch (Exception e) { try { _logger = Logger.getLogger(this.getClass().getName()); _logger.log(Level.SEVERE, "Error detected while creating the logger: ", e); } catch (RuntimeException e1) { } } } /** * 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(); } if(_logger.isLoggable(Level.FINER)){ _logger.throwing(className, methodName, t); } _logger.severe(message + " - " + t.toString() + " in " + className + "." + methodName); } /** * 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 Logger _logger; private Map<String, Object> _systemParams; }