/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2015, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.access.filter; import ch.qos.logback.core.filter.Filter; import ch.qos.logback.core.spi.FilterReply; import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.StandardMBean; import java.lang.management.ManagementFactory; public class CountingFilter extends Filter { long total = 0; final StatisticalViewImpl accessStatsImpl; String domain = "ch.qos.logback.access"; public CountingFilter() { accessStatsImpl = new StatisticalViewImpl(this); } @Override public FilterReply decide(Object event) { total++; accessStatsImpl.update(); return FilterReply.NEUTRAL; } public long getTotal() { return total; } @Override public void start() { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); try { ObjectName on = new ObjectName(domain + ":Name=" + getName()); StandardMBean mbean = new StandardMBean(accessStatsImpl, StatisticalView.class); if (mbs.isRegistered(on)) { mbs.unregisterMBean(on); } mbs.registerMBean(mbean, on); super.start(); } catch (Exception e) { addError("Failed to create mbean", e); } } @Override public void stop() { super.stop(); try { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName on = new ObjectName("totp:Filter=1"); mbs.unregisterMBean(on); } catch (Exception e) { addError("Failed to unregister mbean", e); } } public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } }