/* * 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 */ /* * ident "%Z%%M% %I% %E% SMI" * * Copyright (c) 1999,2001 by Sun Microsystems, Inc. * All rights reserved. * */ package com.sun.slp; import java.io.*; /** * A logging class which writes to UNIX syslog. This class can be dynamically * loaded by SLPConfig and used as the log object by the writeLog and * writeLogLine methods. Note that we need to use JNI here to call the * native syslog. This is because syslog can be listening on any port * mapped to 'syslog' in the services table, but Java provides no way to * query this mapping. * * This class does not actually write anything until the flush() method * in invoked; this will write the concatenation of all messages * passed to the write() method since the last invokation of flush(). * * The actual logging class used can be controlled via the * sun.net.slp.loggerClass property. * * See also the SLPLog (in slpd.java) and StderrLog classes. */ class Syslog extends Writer { private StringBuffer buf; public Syslog() { buf = new StringBuffer(); // can't just get SLPConfig; causes stack recursion tracingOn = Boolean.getBoolean("sun.net.slp.traceALL") || Boolean.getBoolean("net.slp.traceReg") || Boolean.getBoolean("net.slp.traceMsg") || Boolean.getBoolean("net.slp.traceDrop") || Boolean.getBoolean("net.slp.traceDATraffic"); } public void write(char[] cbuf, int off, int len) throws IOException { buf.append(cbuf, off, len); } public void flush() { int priority; if (tracingOn) { priority = 6; // LOG_INFO } else { priority = 2; // LOG_CRIT } syslog(priority, buf.toString()); buf = new StringBuffer(); } public void close() { } private native void syslog(int priority, String message); // The JNI implementation is in libslp.so. static { System.load("/usr/lib/libslp.so"); } private boolean tracingOn; }