/* * Copyright 2011 E.J.I.E., S.A. * * Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»); * Solo podrá usarse esta obra si se respeta la Licencia. * Puede obtenerse una copia de la Licencia en * * http://ec.europa.eu/idabc/eupl.html * * Salvo cuando lo exija la legislación aplicable o se acuerde por escrito, * el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL», * SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas. * Véase la Licencia en el idioma concreto que rige los permisos y limitaciones * que establece la Licencia. */ package com.ejie.x38.log; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.qos.logback.core.spi.ContextAwareBase; import ch.qos.logback.core.spi.LifeCycle; import ch.qos.logback.core.status.ErrorStatus; import ch.qos.logback.core.status.Status; import ch.qos.logback.core.status.StatusListener; import ch.qos.logback.core.status.StatusManager; import ch.qos.logback.core.util.StatusPrinter; /** * * Lisen responsible for writing the state of logback in the output of logs * * @author UDA * */ public class UdaLogStatusListener extends ContextAwareBase implements StatusListener, LifeCycle { final static Logger logger = LoggerFactory.getLogger(UdaLogStatusListener.class); static final long DEFAULT_RESTROSPECTIVE = 300L; boolean isStarted = false; long retrospective = 300L; private void print(Status status) { StringBuilder sb = null; if (ErrorStatus.ERROR == status.getEffectiveLevel()){ sb = new StringBuilder(status.toString()); StatusPrinter.buildStr(sb, "", status); System.out.println(sb); sb = null; // logger.error(sb.toString(), status.getThrowable()); } // else if (ErrorStatus.WARN == status.getEffectiveLevel()){ // sb = new StringBuilder(status.toString()); // logger.warn(sb.toString()); // } else { // sb = new StringBuilder(status.toString()); // logger.info(sb.toString()); // } } public void addStatusEvent(Status status) { if (!this.isStarted) return; print(status); } private void retrospectivePrint() { long now = System.currentTimeMillis(); StatusManager sm = this.context.getStatusManager(); List<Status> statusList = sm.getCopyOfStatusList(); for (Status status : statusList) { long timestamp = status.getDate().longValue(); if (now - timestamp < this.retrospective) print(status); } } public void start() { this.isStarted = true; if (this.retrospective > 0L) retrospectivePrint(); } public void setRetrospective(long retrospective) { this.retrospective = retrospective; } public long getRetrospective() { return this.retrospective; } public void stop() { this.isStarted = false; } public boolean isStarted() { return this.isStarted; } }