All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cloudbees.syslog.integration.jul.SyslogHandler Maven / Gradle / Ivy

/**
 * Copyright 2010-2016 OrientDB LTD (http://orientdb.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * 	http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * For more information: http://www.orientdb.com
 */
package com.cloudbees.syslog.integration.jul;

import com.cloudbees.syslog.Facility;
import com.cloudbees.syslog.Severity;
import com.cloudbees.syslog.SyslogMessage;
import com.cloudbees.syslog.integration.jul.util.LevelHelper;
import com.cloudbees.syslog.integration.jul.util.LogManagerHelper;
import com.cloudbees.syslog.sender.SyslogMessageSender;
import com.cloudbees.syslog.sender.UdpSyslogMessageSender;

import java.io.Closeable;
import java.io.IOException;
import java.util.logging.*;

/**
 * @author Cyrille Le Clerc
 */
public class SyslogHandler extends AbstractHandler {

    private SyslogMessageSender syslogMessageSender;

    private String appName;
    private Facility facility = Facility.USER;
    private Severity severity = Severity.DEBUG;
    private String messageHostname;

    public SyslogHandler() {
        super();
        LogManager manager = LogManager.getLogManager();

        String cname = getClass().getName();

        UdpSyslogMessageSender udpSender = new UdpSyslogMessageSender();
        udpSender.setSyslogServerHostname(LogManagerHelper.getStringProperty(manager, cname + ".syslogServerHostname", SyslogMessageSender.DEFAULT_SYSLOG_HOST));
        udpSender.setSyslogServerPort(LogManagerHelper.getIntProperty(manager, cname + ".syslogServerPort", SyslogMessageSender.DEFAULT_SYSLOG_PORT));

        appName = LogManagerHelper.getStringProperty(manager, cname + ".appName", this.appName);
        udpSender.setDefaultAppName(appName);
        facility = Facility.fromLabel(LogManagerHelper.getStringProperty(manager, cname + ".facility", this.facility.label()));
        udpSender.setDefaultFacility(facility);
        severity = Severity.fromLabel(LogManagerHelper.getStringProperty(manager, cname + ".severity", this.severity.label()));
        udpSender.setDefaultSeverity(severity);
        messageHostname = LogManagerHelper.getStringProperty(manager, cname + ".messageHostname", this.messageHostname);
        udpSender.setDefaultMessageHostname(messageHostname);

        this.syslogMessageSender = udpSender;
    }

    public SyslogHandler(SyslogMessageSender syslogMessageSender) {
        this(syslogMessageSender, Level.INFO, null);
    }

    public SyslogHandler(SyslogMessageSender syslogMessageSender, Level level, Filter filter) {
        super(level, filter);
        this.syslogMessageSender = syslogMessageSender;
    }

    @Override
    protected Formatter getDefaultFormatter() {
        return new SyslogMessageFormatter();
    }

    @Override
    public void publish(LogRecord record) {
        if (!isLoggable(record))
            return;

        String msg = getFormatter().format(record);

        Severity severity = LevelHelper.toSeverity(record.getLevel());
        if (severity == null)
            severity = this.severity;

        SyslogMessage message = new SyslogMessage()
                .withTimestamp(record.getMillis())
                .withSeverity(severity)
                .withAppName(this.appName)
                .withHostname(this.messageHostname)
                .withFacility(this.facility)
                .withMsg(msg);

        try {
            syslogMessageSender.sendMessage(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void flush() {

    }

    @Override
    public void close() throws SecurityException {
        if (syslogMessageSender instanceof Closeable) {
            try {
                ((Closeable) syslogMessageSender).close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public String getEncoding() {
        throw new IllegalStateException();
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public Facility getFacility() {
        return facility;
    }

    public void setFacility(Facility facility) {
        this.facility = facility;
    }

    public Severity getSeverity() {
        return severity;
    }

    public void setSeverity(Severity severity) {
        this.severity = severity;
    }

    public String getMessageHostname() {
        return messageHostname;
    }

    public void setMessageHostname(String messageHostname) {
        this.messageHostname = messageHostname;
    }

    public SyslogMessageSender getSyslogMessageSender() {
        return syslogMessageSender;
    }

    public void setSyslogMessageSender(SyslogMessageSender syslogMessageSender) {
        this.syslogMessageSender = syslogMessageSender;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy