/*******************************************************************************
* ALMA - Atacama Large Millimeter Array
* Copyright (c) ESO - European Southern Observatory, 2011
* (in the framework of the ALMA collaboration).
* All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*******************************************************************************/
package alma.acs.logging.domainspecific;
import java.util.logging.Level;
import alma.acs.logging.AcsLogger;
/**
* Base class for the various fixed-audience loggers.
* As of ACS 9.0, the following audience types are defined in acscommon.idl:
* const string OPERATOR = "Operator";
* const string DEVELOPER = "Developer";
* const string SYSADMIN = "Sysadmin";
* const string DBA = "DBA";
* const string SCILOG = "SciLog";
* const string NO_AUDIENCE = "";
* but we only provide the convenience wrappers for the most popular audiences: Operator, Developer, SciLog.
* For other audiences, the static method {@link #log(Level, String, Throwable, AcsLogger, Audience)}
* can be used, or {@link AcsLogger#logToAudience(Level, String, String)} with a generic audience string
* which is especially useful when a new audience type gets introduced and ACS has not added support for it yet.
*
* The audience loggers are wrappers around an AcsLogger, calling * {@link AcsLogger#logToAudience(Level, String, String)} * with a fixed audience string that corresponds to an {@link Audience} enum. * The goal is to keep the "audience" concept generic in AcsLogger, and confine * the usage of concrete alma audience types to this subpackage, e.g. {@link ScienceLogger}. *
* See http://jira.alma.cl/browse/COMP-3130 about adopting this code * from CONTROL/Common/Define/src/alma/Control/Common/*Logger.java to ACS. */ public abstract class AudienceLogger { public static enum Audience { // update this list when a new audience type gets added in alma OPERATOR(alma.log_audience.OPERATOR.value), DEVELOPER(alma.log_audience.DEVELOPER.value), SYSADMIN(alma.log_audience.SYSADMIN.value), DBA(alma.log_audience.DBA.value), SCILOG(alma.log_audience.SCILOG.value), NO_AUDIENCE(alma.log_audience.NO_AUDIENCE.value); private final String idlName; private Audience(String idlName) { this.idlName = idlName; } public String getIdlName() { return idlName; } } // The internal logger must be an AcsLogger private final AcsLogger delegateLogger; // Audience name private final Audience audience; protected AudienceLogger(AcsLogger logger, Audience audience) { this.delegateLogger = logger; this.audience = audience; logger.addLoggerClass(AudienceLogger.class); } public AcsLogger getLogger() { return delegateLogger; } /** * Static log method, useful for rare audience types that don't have their own subclass (yet). */ public static void log(Level level, String msg, Throwable thr, AcsLogger acsLogger, Audience audience) { acsLogger.addLoggerClass(AudienceLogger.class); acsLogger.logToAudience(level, msg, thr, audience.getIdlName()); } /** * To be called by static methods of subclasses only. */ protected static void log(Level level, String msg, Throwable thr, AcsLogger acsLogger, Audience audience, Class extends AudienceLogger> staticLoggerClass) { acsLogger.addLoggerClass(staticLoggerClass); acsLogger.addLoggerClass(AudienceLogger.class); acsLogger.logToAudience(level, msg, thr, audience.getIdlName()); } /** * Log with throwable */ public void log(Level level, String msg, Throwable thr) { delegateLogger.logToAudience(level, msg, thr, audience.getIdlName()); } public void severe(String msg) { delegateLogger.logToAudience(Level.SEVERE, msg, audience.getIdlName()); } public void warning(String msg) { delegateLogger.logToAudience(Level.WARNING, msg, audience.getIdlName()); } public void info(String msg) { delegateLogger.logToAudience(Level.INFO, msg, audience.getIdlName()); } public void config(String msg) { delegateLogger.logToAudience(Level.CONFIG, msg, audience.getIdlName()); } public void fine(String msg) { delegateLogger.logToAudience(Level.FINE, msg, audience.getIdlName()); } public void finer(String msg) { delegateLogger.logToAudience(Level.FINER, msg, audience.getIdlName()); } public void finest(String msg) { delegateLogger.logToAudience(Level.FINEST, msg, audience.getIdlName()); } }