/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* ident "%Z%%M% %I% %E% SMI" */ package com.sun.solaris.service.logging; import java.util.*; import java.util.logging.*; /** * syslog(3C) severity levels defined in * sys/syslog.h. */ public final class Severity extends Level { /** * LOG_EMERG from sys/syslog.h */ private static final int LOG_EMERG = 0; /** * LOG_ALERT from sys/syslog.h */ private static final int LOG_ALERT = 1; /** * LOG_CRIT from sys/syslog.h */ private static final int LOG_CRIT = 2; /** * LOG_ERR from sys/syslog.h */ private static final int LOG_ERR = 3; /** * LOG_WARNING from sys/syslog.h */ private static final int LOG_WARNING = 4; /** * LOG_NOTICE from sys/syslog.h */ private static final int LOG_NOTICE = 5; /** * LOG_INFO from sys/syslog.h */ private static final int LOG_INFO = 6; /** * LOG_DEBUG from sys/syslog.h */ private static final int LOG_DEBUG = 7; /** * Maps static instances by name. */ private static final HashMap severityMap = new HashMap(); /** * LOG_EMERG */ public static final Severity EMERG = new Severity(LOG_EMERG, Level.SEVERE.intValue() - 1, "EMERG"); /** * LOG_ALERT */ public static final Severity ALERT = new Severity(LOG_ALERT, Level.SEVERE.intValue() - 2, "ALERT"); /** * LOG_CRIT */ public static final Severity CRIT = new Severity(LOG_CRIT, Level.SEVERE.intValue() - 3, "CRIT"); /** * LOG_ERR */ public static final Severity ERR = new Severity(LOG_ERR, Level.SEVERE.intValue() - 4, "ERR"); /** * LOG_WARNING */ public static final Severity WARNING = new Severity(LOG_WARNING, Level.WARNING.intValue() - 1, "WARNING"); /** * LOG_NOTICE */ public static final Severity NOTICE = new Severity(LOG_NOTICE, Level.INFO.intValue() - 1, "NOTICE"); /** * LOG_INFO */ public static final Severity INFO = new Severity(LOG_INFO, Level.INFO.intValue() - 2, "INFO"); /** * LOG_DEBUG */ public static final Severity DEBUG = new Severity(LOG_DEBUG, Level.FINE.intValue() - 1, "DEBUG"); /** * Add aliases. */ static { severityMap.put("WARN", Severity.WARNING); severityMap.put("ERROR", Severity.ERR); } /** * Disallowed overidden constant Level */ private static final Level SEVERE = null; /** * Disallowed overidden constant Level */ private static final Level CONFIG = null; /** * Disallowed overidden constant Level */ private static final Level FINE = null; /** * Disallowed overidden constant Level */ private static final Level FINER = null; /** * Disallowed overidden constant Level */ private static final Level FINEST = null; /** * See getNative(). */ private int severity; /** * Constructs a Severity with the given native severity, Java * logging level, and name. */ private Severity(int severity, int level, String name) { super(name, level); this.severity = severity; Object displaced = severityMap.put(name, this); assert (displaced == null); } /** * Returns the Severity closest in meaning to the given Level. * This is meant to be used by SyslogHandler to determine a * proper Severity for Records which only specify a Level. * * * * If the level is below Level.FINE, i.e. the level is too low * for syslog, then null is returned. */ public static Severity severityForLevel(Level l) { if (l instanceof Severity) return (Severity)l; else { if (l.intValue() >= Level.SEVERE.intValue()) return (ERR); if (l.intValue() >= Level.WARNING.intValue()) return (WARNING); if (l.intValue() >= Level.INFO.intValue()) return (INFO); if (l.intValue() >= Level.CONFIG.intValue()) return (INFO); if (l.intValue() >= Level.FINE.intValue()) return (DEBUG); return (null); } } /** * Returns the native syslog(3C) severity. */ public int getNative() { return (severity); } /** * Returns the Severity object with the given name, interpreted * case-insensitively. * * @throws IllegalArgumentException if the name isn't of a known * severity. */ public static Level parse(String name) { Severity severity = (Severity)severityMap.get( name.toUpperCase()); if (severity == null) throw new IllegalArgumentException(); else return (severity); } /** * Returns the Severity object with the given name, interpreted * case-insensitively. * * @throws IllegalArgumentException if the name isn't of a known * severity. */ public static Severity getSeverityWithName(String name) { return ((Severity)parse(name)); } }