Changeset 8121


Ignore:
Timestamp:
Mar 7, 2023, 3:34:02 PM (7 months ago)
Author:
Nicklas Nordborg
Message:

References #2295: Add API for services to send log messages that can be displayed by the web client

Added some more methods to the logging API to make it easier to use. It also possible to forward log messages to a SLF4J Logger implementation.

Location:
branches/3.19-stable/src/clients/web/net/sf/basedb/clients/web/extensions/service
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/3.19-stable/src/clients/web/net/sf/basedb/clients/web/extensions/service/ServiceLog.java

    r8120 r8121  
    3333
    3434import org.apache.commons.collections4.iterators.UnmodifiableIterator;
     35import org.slf4j.Logger;
    3536
    3637/**
     
    226227  public enum LogLevel
    227228  {
    228     INFO("info.png"),
    229     WARNING("warning.png"),
    230     ERROR("error.png"),
    231     DEBUG("bug.png");
     229    INFO("info.png")
     230    {
     231      @Override
     232      void logTo(Logger logger, String msg, Throwable t)
     233      {
     234        logger.info(msg, t);
     235      }
     236    },
     237    WARNING("warning.png")
     238    {
     239      @Override
     240      void logTo(Logger logger, String msg, Throwable t)
     241      {
     242        logger.warn(msg, t);
     243      }
     244    },
     245    ERROR("error.png")
     246    {
     247      @Override
     248      void logTo(Logger logger, String msg, Throwable t)
     249      {
     250        logger.error(msg, t);
     251      }
     252    },
     253    DEBUG("bug.png")
     254    {
     255      @Override
     256      void logTo(Logger logger, String msg, Throwable t)
     257      {
     258        logger.debug(msg, t);
     259      }
     260    };
    232261   
    233262    private final String icon;
     
    245274      return icon;
    246275    }
     276   
     277    abstract void logTo(org.slf4j.Logger logger, String msg, Throwable t);
    247278  }
    248279 
  • branches/3.19-stable/src/clients/web/net/sf/basedb/clients/web/extensions/service/ServiceLogger.java

    r8118 r8121  
    2323{
    2424  private final ServiceLog log;
     25  private final org.slf4j.Logger otherLogger;
    2526 
    2627  ServiceLogger(ServiceLog log)
    2728  {
    28     this.log = log;
     29    this(log, null);
    2930  }
    3031 
     32  ServiceLogger(ServiceLog log, org.slf4j.Logger otherLogger)
     33  {
     34    this.log = log;
     35    this.otherLogger = otherLogger;
     36  }
     37 
     38  /**
     39    Wrap a generic SLF4J logger with this logger. Messages
     40    that are submitted to the logger created by this method are
     41    also forwarded to the SLF4J logger.
     42  */
     43  public ServiceLogger wrap(org.slf4j.Logger otherLogger)
     44  {
     45    return new ServiceLogger(this.log, otherLogger);
     46  }
     47 
     48  /**
     49    Check if debug logging has been enabled or not.
     50  */
    3151  public boolean isDebugEnabled()
    3252  {
     
    3454  }
    3555 
     56  /**
     57    Log a message at the specified level.
     58  */
    3659  public void log(LogLevel level, String msg)
    3760  {
    3861    log.add(new LogEntry(level, msg, null));
     62    if (otherLogger != null) level.logTo(otherLogger, msg, null);
    3963  }
    4064 
    41   public void log(LogLevel level, String msg, Throwable t)
     65  /**
     66    Log a message at the specified level with an optional stacktrace.
     67  */
     68  public void log(LogLevel level, String msg, Throwable stacktrace)
    4269  {
    43     log.add(new LogEntry(level, msg, t));
     70    log.add(new LogEntry(level, msg, stacktrace));
     71    if (otherLogger != null) level.logTo(otherLogger, msg, stacktrace);
     72  }
     73 
     74  /**
     75    Log an INFO message.
     76  */
     77  public void info(String msg)
     78  {
     79    log(LogLevel.INFO, msg);
     80  }
     81  /**
     82    Log an INFO message with an optional stacktrace.
     83  */
     84  public void info(String msg, Throwable stacktrace)
     85  {
     86    log(LogLevel.INFO, msg, stacktrace);
     87  }
     88 
     89  /**
     90    Log a WARNING message.
     91  */
     92  public void warning(String msg)
     93  {
     94    log(LogLevel.WARNING, msg);
     95  }
     96  /**
     97    Log a WARNING message with an optional stacktrace.
     98  */
     99  public void warning(String msg, Throwable t)
     100  {
     101    log(LogLevel.WARNING, msg, t);
     102  }
     103 
     104  /**
     105    Log an ERROR message.
     106  */
     107  public void error(String msg)
     108  {
     109    log(LogLevel.ERROR, msg);
     110  }
     111  /**
     112    Log an ERROR message with an optional stacktrace.
     113  */
     114  public void error(String msg, Throwable t)
     115  {
     116    log(LogLevel.ERROR, msg, t);
     117  }
     118 
     119  /**
     120    Log a DEBUG message.
     121  */
     122  public void debug(String msg)
     123  {
     124    log(LogLevel.DEBUG, msg);
     125  }
     126  /**
     127    Log a DEBUG message with an optional stacktrace.
     128  */
     129  public void debug(String msg, Throwable t)
     130  {
     131    log(LogLevel.DEBUG, msg, t);
     132  }
     133 
     134  /**
     135    Check if TRACE-level logging has been enabled in the
     136    related SLF4J logger. If no SLF4J logger is related
     137    (see {@link #wrap(org.slf4j.Logger)}) all TRACE messages
     138    will be ignored.
     139  */
     140  public boolean isTraceEnabled()
     141  {
     142    return otherLogger != null && otherLogger.isTraceEnabled();
     143  }
     144  /**
     145    Log a TRACE message with the related SLF4J logger.
     146    If no SLF4J logger is related
     147    (see {@link #wrap(org.slf4j.Logger)}) all TRACE messages
     148    will be ignored.
     149  */
     150  public void trace(String msg)
     151  {
     152    if (otherLogger != null) otherLogger.trace(msg);
     153  }
     154  /**
     155    Log a TRACE message with an optional stacktrace.
     156    If no SLF4J logger is related
     157    (see {@link #wrap(org.slf4j.Logger)}) all TRACE messages
     158    will be ignored.
     159  */
     160  public void trace(String msg, Throwable t)
     161  {
     162    if (otherLogger != null) otherLogger.trace(msg, t);
    44163  }
    45164 
Note: See TracChangeset for help on using the changeset viewer.