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

se.l4.vibe.backend.LoggingBackend Maven / Gradle / Ivy

There is a newer version: 0.4.0
Show newest version
package se.l4.vibe.backend;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import se.l4.vibe.Vibe;
import se.l4.vibe.event.EventListener;
import se.l4.vibe.event.EventSeverity;
import se.l4.vibe.event.Events;
import se.l4.vibe.probes.Probe;
import se.l4.vibe.probes.SampleListener;
import se.l4.vibe.probes.SampledProbe;
import se.l4.vibe.probes.Sampler;
import se.l4.vibe.timer.Timer;

/**
 * Basic backend that will log a message every time something is sampled.
 * 
 * @author Andreas Holstenson
 *
 */
public class LoggingBackend
	implements VibeBackend
{
	private final Logger logger;
	
	public LoggingBackend()
	{
		this(Vibe.class);
	}
	
	public LoggingBackend(String root)
	{
		logger = LoggerFactory.getLogger(root);
	}
	
	public LoggingBackend(Class root)
	{
		logger = LoggerFactory.getLogger(root);
	}

	@Override
	public void export(String path, Sampler series)
	{
		series.addListener(new PrintSampleListener(logger, path));
	}
	
	@Override
	public void export(String path, Probe probe)
	{
	}
	
	@Override
	public void export(String path, Events events)
	{
		events.addListener(new PrintEventListener(logger, path));
	}
	
	@Override
	public void export(String path, Timer timer)
	{
	}

	private static class PrintSampleListener
		implements SampleListener
	{
		private final String path;
		private final Logger logger;

		public PrintSampleListener(Logger logger, String path)
		{
			this.logger = logger;
			this.path = path;
		}
		
		@Override
		public void sampleAcquired(SampledProbe probe, Sampler.Entry entry)
		{
			logger.info("{}: {}", path, entry.getValue());
		}
	}
	
	private static class PrintEventListener
		implements EventListener
	{
		private final String path;
		private final Logger logger;
	
		public PrintEventListener(Logger logger, String path)
		{
			this.logger = logger;
			this.path = path;
		}
		
		@Override
		public void eventRegistered(Events events, EventSeverity severity, Object event)
		{
			switch(severity)
			{
				case DEBUG:
					logger.debug("{}: {}", path, event);
					break;
				case INFO:
					logger.info("{}: {}", path, event);
					break;
				case WARN:
					logger.warn("{}: {}", path, event);
					break;
				case ERROR:
					logger.error("{}: {}", path, event);
					break;
				case CRITICAL:
					logger.error("CRITICAL: {}: {}", path, event);
					break;
			}
		}
	}
	
	@Override
	public void close()
	{
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy