src/core/net/sf/basedb/util/extensions/LoggingErrorHandlerFactory.java

Code
Comments
Other
Rev Date Author Line
5486 12 Nov 10 nicklas 1 /**
5486 12 Nov 10 nicklas 2   $Id$
5486 12 Nov 10 nicklas 3
5486 12 Nov 10 nicklas 4   Copyright (C) 2010 Nicklas Nordborg
5486 12 Nov 10 nicklas 5
5486 12 Nov 10 nicklas 6   This file is part of BASE - BioArray Software Environment.
5486 12 Nov 10 nicklas 7   Available at http://base.thep.lu.se/
5486 12 Nov 10 nicklas 8
5486 12 Nov 10 nicklas 9   BASE is free software; you can redistribute it and/or
5486 12 Nov 10 nicklas 10   modify it under the terms of the GNU General Public License
5486 12 Nov 10 nicklas 11   as published by the Free Software Foundation; either version 3
5486 12 Nov 10 nicklas 12   of the License, or (at your option) any later version.
5486 12 Nov 10 nicklas 13
5486 12 Nov 10 nicklas 14   BASE is distributed in the hope that it will be useful,
5486 12 Nov 10 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5486 12 Nov 10 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5486 12 Nov 10 nicklas 17   GNU General Public License for more details.
5486 12 Nov 10 nicklas 18
5486 12 Nov 10 nicklas 19   You should have received a copy of the GNU General Public License
5486 12 Nov 10 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5486 12 Nov 10 nicklas 21 */
5486 12 Nov 10 nicklas 22 package net.sf.basedb.util.extensions;
5486 12 Nov 10 nicklas 23
5488 15 Nov 10 nicklas 24 import net.sf.basedb.util.Values;
5488 15 Nov 10 nicklas 25
5486 12 Nov 10 nicklas 26
5486 12 Nov 10 nicklas 27 /**
5486 12 Nov 10 nicklas 28   Exception handler factory implementation that logs error messages
5486 12 Nov 10 nicklas 29   using the default logging mechanism. This factory is it's own
5486 12 Nov 10 nicklas 30   error handler and the implementation is thread-safe (once the level
5486 12 Nov 10 nicklas 31   has been set).
5486 12 Nov 10 nicklas 32   
5486 12 Nov 10 nicklas 33   @author Nicklas
5486 12 Nov 10 nicklas 34   @since 2.17
5486 12 Nov 10 nicklas 35   @base.modified $Date$
5486 12 Nov 10 nicklas 36 */
5487 15 Nov 10 nicklas 37 public class LoggingErrorHandlerFactory
5487 15 Nov 10 nicklas 38   implements ErrorHandlerFactory<Action>, ErrorHandler<Action>
5486 12 Nov 10 nicklas 39 {
5486 12 Nov 10 nicklas 40   
6444 09 Apr 14 nicklas 41   private static final org.slf4j.Logger log = 
6444 09 Apr 14 nicklas 42     org.slf4j.LoggerFactory.getLogger(LoggingErrorHandlerFactory.class);
5486 12 Nov 10 nicklas 43
5486 12 Nov 10 nicklas 44   private Level level;
5488 15 Nov 10 nicklas 45   private boolean rememberLast;
5488 15 Nov 10 nicklas 46   
5486 12 Nov 10 nicklas 47   /**
5486 12 Nov 10 nicklas 48     Create a new error-level loggin error handler factory.
5486 12 Nov 10 nicklas 49   */
5486 12 Nov 10 nicklas 50   public LoggingErrorHandlerFactory()
5486 12 Nov 10 nicklas 51   {
5488 15 Nov 10 nicklas 52     this.level = Level.ERROR;
5488 15 Nov 10 nicklas 53     this.rememberLast = false;
5486 12 Nov 10 nicklas 54   }
5486 12 Nov 10 nicklas 55
5486 12 Nov 10 nicklas 56   /**
5486 12 Nov 10 nicklas 57     Create a new custom-level logging error handler factory.
5486 12 Nov 10 nicklas 58   */
5486 12 Nov 10 nicklas 59   public LoggingErrorHandlerFactory(String level)
5486 12 Nov 10 nicklas 60   {
5486 12 Nov 10 nicklas 61     setLevel(level);
5486 12 Nov 10 nicklas 62   }
5486 12 Nov 10 nicklas 63
5486 12 Nov 10 nicklas 64   /*
5486 12 Nov 10 nicklas 65     From the ErrorHandlerFactory interface
5486 12 Nov 10 nicklas 66     --------------------------------------
5486 12 Nov 10 nicklas 67   */
5486 12 Nov 10 nicklas 68   @Override
5487 15 Nov 10 nicklas 69   public ErrorHandler<Action> getErrorHandler(InvokationContext<? extends Action> context)
5486 12 Nov 10 nicklas 70   {
5486 12 Nov 10 nicklas 71     return this;
5486 12 Nov 10 nicklas 72   }
5486 12 Nov 10 nicklas 73   // --------------------------------------
5486 12 Nov 10 nicklas 74
5486 12 Nov 10 nicklas 75   /*
5486 12 Nov 10 nicklas 76     From the ErrorHandler interface
5486 12 Nov 10 nicklas 77     --------------------------------------
5486 12 Nov 10 nicklas 78   */
5486 12 Nov 10 nicklas 79   @Override
6875 20 Apr 15 nicklas 80   @SuppressWarnings({ "unchecked", "rawtypes" })
5487 15 Nov 10 nicklas 81   public void handleError(InvokationContext<? extends Action> context, Action action, 
5486 12 Nov 10 nicklas 82     String message, Throwable t)
5486 12 Nov 10 nicklas 83   {
5488 15 Nov 10 nicklas 84     if (rememberLast) ((InvokationContext)context).setError(action, t);
6444 09 Apr 14 nicklas 85     level.log(log, message, t);
5486 12 Nov 10 nicklas 86   }
5486 12 Nov 10 nicklas 87   // --------------------------------------
5486 12 Nov 10 nicklas 88   
5486 12 Nov 10 nicklas 89   /**
5486 12 Nov 10 nicklas 90     Set the level of the error handler.
5486 12 Nov 10 nicklas 91   */
5486 12 Nov 10 nicklas 92   public void setLevel(String level)
5486 12 Nov 10 nicklas 93   {
6444 09 Apr 14 nicklas 94     try
6444 09 Apr 14 nicklas 95     {
6444 09 Apr 14 nicklas 96       this.level = Level.valueOf(level);
6444 09 Apr 14 nicklas 97     }
6444 09 Apr 14 nicklas 98     catch (Exception ex)
6444 09 Apr 14 nicklas 99     {}
5486 12 Nov 10 nicklas 100   }
5486 12 Nov 10 nicklas 101   
5488 15 Nov 10 nicklas 102   /**
5488 15 Nov 10 nicklas 103     Set a flag indicating if errors should be remembered
5488 15 Nov 10 nicklas 104     by the registry. The last error for an extension or 
5488 15 Nov 10 nicklas 105     extension point can be retreived by calling 
5488 15 Nov 10 nicklas 106     {@link Registry#getLastExtensionError(String)} and/or
5488 15 Nov 10 nicklas 107     {@link Registry#getLastExtensionPointError(String)}.
5488 15 Nov 10 nicklas 108     @param remember A string that evaluates to a boolean
5488 15 Nov 10 nicklas 109   */
5488 15 Nov 10 nicklas 110   public void setRememberLast(String remember)
5488 15 Nov 10 nicklas 111   {
5488 15 Nov 10 nicklas 112     this.rememberLast = Values.getBoolean(remember);
5488 15 Nov 10 nicklas 113   }
5488 15 Nov 10 nicklas 114   
6444 09 Apr 14 nicklas 115   /**
6444 09 Apr 14 nicklas 116     Log level implementations for slf4j. Use {@link Level#log(org.slf4j.Logger, String, Throwable)}
6444 09 Apr 14 nicklas 117     to log a message at the given level to the slf4j logger.
6444 09 Apr 14 nicklas 118     @since 3.3
6444 09 Apr 14 nicklas 119   */
6444 09 Apr 14 nicklas 120   public static enum Level
6444 09 Apr 14 nicklas 121   {
6444 09 Apr 14 nicklas 122     OFF 
6444 09 Apr 14 nicklas 123       {
6444 09 Apr 14 nicklas 124         @Override
6444 09 Apr 14 nicklas 125         public void log(org.slf4j.Logger logger, String message, Throwable t)
6444 09 Apr 14 nicklas 126         {}
6444 09 Apr 14 nicklas 127       },
6444 09 Apr 14 nicklas 128     FATAL
6444 09 Apr 14 nicklas 129     {
6444 09 Apr 14 nicklas 130       @Override
6444 09 Apr 14 nicklas 131       public void log(org.slf4j.Logger logger, String message, Throwable t)
6444 09 Apr 14 nicklas 132       {
6444 09 Apr 14 nicklas 133         logger.error(message, t);
6444 09 Apr 14 nicklas 134       }
6444 09 Apr 14 nicklas 135     },
6444 09 Apr 14 nicklas 136     ERROR
6444 09 Apr 14 nicklas 137     {
6444 09 Apr 14 nicklas 138       @Override
6444 09 Apr 14 nicklas 139       public void log(org.slf4j.Logger logger, String message, Throwable t)
6444 09 Apr 14 nicklas 140       {
6444 09 Apr 14 nicklas 141         logger.error(message, t);
6444 09 Apr 14 nicklas 142       }
6444 09 Apr 14 nicklas 143     },
6444 09 Apr 14 nicklas 144     WARN
6444 09 Apr 14 nicklas 145     {
6444 09 Apr 14 nicklas 146       @Override
6444 09 Apr 14 nicklas 147       public void log(org.slf4j.Logger logger, String message, Throwable t)
6444 09 Apr 14 nicklas 148       {
6444 09 Apr 14 nicklas 149         logger.warn(message, t);
6444 09 Apr 14 nicklas 150       }
6444 09 Apr 14 nicklas 151     },
6444 09 Apr 14 nicklas 152     INFO
6444 09 Apr 14 nicklas 153     {
6444 09 Apr 14 nicklas 154       @Override
6444 09 Apr 14 nicklas 155       public void log(org.slf4j.Logger logger, String message, Throwable t)
6444 09 Apr 14 nicklas 156       {
6444 09 Apr 14 nicklas 157         logger.info(message, t);
6444 09 Apr 14 nicklas 158       }
6444 09 Apr 14 nicklas 159     },
6444 09 Apr 14 nicklas 160     DEBUG
6444 09 Apr 14 nicklas 161     {
6444 09 Apr 14 nicklas 162       @Override
6444 09 Apr 14 nicklas 163       public void log(org.slf4j.Logger logger, String message, Throwable t)
6444 09 Apr 14 nicklas 164       {
6444 09 Apr 14 nicklas 165         logger.debug(message, t);
6444 09 Apr 14 nicklas 166       }
6444 09 Apr 14 nicklas 167     },
6444 09 Apr 14 nicklas 168     TRACE
6444 09 Apr 14 nicklas 169     {
6444 09 Apr 14 nicklas 170       @Override
6444 09 Apr 14 nicklas 171       public void log(org.slf4j.Logger logger, String message, Throwable t)
6444 09 Apr 14 nicklas 172       {
6444 09 Apr 14 nicklas 173         logger.trace(message, t);
6444 09 Apr 14 nicklas 174       }
6444 09 Apr 14 nicklas 175     };
6444 09 Apr 14 nicklas 176     
6444 09 Apr 14 nicklas 177     public abstract void log(org.slf4j.Logger logger, String message, Throwable t);
6444 09 Apr 14 nicklas 178     
6444 09 Apr 14 nicklas 179   }
5486 12 Nov 10 nicklas 180 }