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

org.coos.plugin.logback.impl.COOSAppender Maven / Gradle / Ivy

There is a newer version: 1.3.1
Show newest version
/**
 * COOS - Connected Objects Operating System (www.connectedobjects.org).
 *
 * Copyright (C) 2009 Telenor ASA and Tellu AS. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * 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 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 program.  If not, see .
 *
 * You may also contact one of the following for additional information:
 * Telenor ASA, Snaroyveien 30, N-1331 Fornebu, Norway (www.telenor.no)
 * Tellu AS, Hagalokkveien 13, N-1383 Asker, Norway (www.tellu.no)
 */
package org.coos.plugin.logback.impl;

import ch.qos.logback.classic.boolex.OnErrorEvaluator;
import ch.qos.logback.classic.net.LoggingEventPreSerializationTransformer;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.spi.PreSerializationTransformer;

/**
 * Send logging event over COOS bus. Typically errors or fatal errors are sent.
 * 
 * @author Robert Bjærum, Tellu AS
 *
 */
public class COOSAppender extends COOSAppenderBase {
	private static final String DEFAULT_DENIED_LOGGERS = "org.coos.plugins.logserver:org.coos.messaging.logging:org.coos.messaging.routing";
	private String deniedLoggers;
	private boolean includeCallerData = false;

	private PreSerializationTransformer pst = new LoggingEventPreSerializationTransformer();

	public COOSAppender() {
		super();
	}

	@Override
	protected void postProcessEvent(ILoggingEvent event) {
		if (includeCallerData) {
			event.getCallerData();
		}
	}

	@Override
	public void start() {
		/*
		 * By default no action is taken before a error event arrives
		 */
		if (eventEvaluator == null) {
			addInfo("Using OnErrorEvaluator");
			OnErrorEvaluator onError = new OnErrorEvaluator();
			onError.setContext(getContext());
			onError.setName("onError");
			onError.start();
			this.eventEvaluator = onError;
		}
		
		/*
		 * Some loggers are denied to avoid recursively generated coos-messages,
		 * by logging that messages are logged.
		 */
		if (deniedLoggers == null || deniedLoggers.length() == 0) {
			deniedLoggers = DEFAULT_DENIED_LOGGERS;
		}
		String[] s = deniedLoggers.split(":");
		for (int i = 0; i < s.length; i++) {
			String prefix = s[i];
			addInfo("LoggerNames with prefix \"" + prefix + "\" will be ignored.");
			LoggerNamePrefixFilter filter = new LoggerNamePrefixFilter();
			filter.setContext(getContext());
			filter.setPrefix(prefix);
			filter.start();
			addFilter(filter);
		}
		
		/*
		 * Start this appender
		 */
		super.start();
	}

	public void setIncludeCallerData(boolean includeCallerData) {
		this.includeCallerData = includeCallerData;
	}

	public PreSerializationTransformer getPST() {
		return pst;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy