Log in Help
Print
Homereleasesgate-8.4-build5748-ALLpluginsDeveloper_Toolssrcgatecreole 〉 Log4JALL.java
 
/*
 * Log4JALL.java
 * 
 * Copyright (c) 1995-2014, The University of Sheffield. See the file
 * COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
 * 
 * This file is part of GATE (see http://gate.ac.uk/), and is free software,
 * licenced under the GNU Library General Public License, Version 2, June 1991
 * (in the distribution as file licence.html, and also available at
 * http://gate.ac.uk/gate/licence.html).
 * 
 * Mark A. Greenwood, 16/5/2014
 */
package gate.creole;

import gate.creole.metadata.AutoInstance;
import gate.creole.metadata.CreoleResource;
import gate.gui.ActionsPublisher;
import gate.resources.img.svg.Log4JALLIcon;

import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.Action;

import org.apache.log4j.Appender;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

@SuppressWarnings("serial")
@CreoleResource(tool = true, isPrivate = true, autoinstances = @AutoInstance, name = "Log4J Level: ALL", helpURL = "http://gate.ac.uk/userguide/sec:misc-creole:dev-tools", comment = "Allows the Log4J log level to be set to ALL from within the GUI")
public class Log4JALL extends AbstractResource implements ActionsPublisher {

  // the cached set of actions so we don't have to keep creating them
  private List<Action> actions = null;

  @Override
  public List<Action> getActions() {

    // if we have already built the action list then just return it
    if(actions != null) return actions;

    // create the empty actions list
    actions = new ArrayList<Action>();

    actions.add(new AbstractAction("Log4J Level: ALL", new Log4JALLIcon(
      24, 24)) {

      @Override
      public void actionPerformed(ActionEvent e) {

        // for convenience get a handle on the root logger
        Logger rootLogger = Logger.getRootLogger();

        // set the log level to ALL on the top level repository
        rootLogger.getLoggerRepository().setThreshold(Level.ALL);

        @SuppressWarnings("unchecked")
        Enumeration<Logger> loggers =
          rootLogger.getLoggerRepository().getCurrentLoggers();
        while(loggers.hasMoreElements()) {
          // for each logger...
          Logger logger = loggers.nextElement();

          // if the log level is set, re-set it to ALL
          if(logger.getLevel() != null) logger.setLevel(Level.ALL);
        }

        @SuppressWarnings("unchecked")
        Enumeration<Appender> appenders = rootLogger.getAllAppenders();
        while(appenders.hasMoreElements()) {
          // for each appender...
          Appender appender = appenders.nextElement();

          if(appender instanceof AppenderSkeleton) {
            // try and set the output threshold to ALL
            ((AppenderSkeleton)appender).setThreshold(Level.ALL);
          }
        }
      }

    });

    //return the list of actions
    return actions;
  }
}