package io.eguan.utils; /* * #%L * Project eguan * %% * Copyright (C) 2012 - 2017 Oodrive * %% * 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. * #L% */ import java.util.concurrent.atomic.AtomicBoolean; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.net.SyslogAppender; /** * Utility class for logs. * * @author oodrive * @author ebredzinski * */ public final class LogUtils { private static final String SYSLOG_ENABLE_STR = "io.eguan.log.enableSyslog"; /** True if syslog log enable */ private static final boolean SYSLOG_ENABLE = Boolean.getBoolean(SYSLOG_ENABLE_STR); private static final Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); private static final AtomicBoolean initSyslogDone = new AtomicBoolean(false); private static final String pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"; /** * Tells if syslog is enabled. * * @return true if the syslog is enabled */ public static final boolean getSyslogEnable() { return SYSLOG_ENABLE; } /** * Initialize the syslog appender for logback. Use the system property io.eguan.log.enableSyslog to * activate log with syslog. * * UDP syslog reception must be activated in /etc/rsyslog.conf with $ModLoad imudp and $UDPServerRun 514. * $EscapeControlCharactersOnReceive can be set to off, so that rsyslog will not escape the tab characters by adding * #011 * */ public static final void initSysLog() { if (SYSLOG_ENABLE) { synchronized (initSyslogDone) { if (initSyslogDone.get()) { return; } final SyslogAppender syslogAppender = new SyslogAppender(); syslogAppender.setContext(rootLogger.getLoggerContext()); syslogAppender.setName("SYSLOG"); syslogAppender.setSuffixPattern(pattern); syslogAppender.setFacility("DAEMON"); syslogAppender.setSyslogHost("localhost"); syslogAppender.start(); rootLogger.addAppender(syslogAppender); initSyslogDone.set(true); } } } /** * Stop the syslog appender for logback. */ public static final void finiSyslog() { synchronized (initSyslogDone) { if (!initSyslogDone.get()) { return; } final SyslogAppender syslogAppender = (SyslogAppender) rootLogger.getAppender("SYSLOG"); if (syslogAppender != null) { if (syslogAppender.isStarted()) { syslogAppender.stop(); } } initSyslogDone.set(false); } } }