001
014
015 package com.liferay.portal.kernel.test;
016
017 import java.io.Closeable;
018
019 import java.util.List;
020 import java.util.concurrent.CopyOnWriteArrayList;
021 import java.util.logging.Handler;
022 import java.util.logging.Level;
023 import java.util.logging.LogRecord;
024 import java.util.logging.Logger;
025
026
029 public class CaptureHandler extends Handler implements Closeable {
030
031 public CaptureHandler(Logger logger, Level level) {
032 _logger = logger;
033
034 _handlers = logger.getHandlers();
035 _level = logger.getLevel();
036 _useParentHandlers = logger.getUseParentHandlers();
037
038 for (Handler handler : _handlers) {
039 logger.removeHandler(handler);
040 }
041
042 logger.setLevel(level);
043 logger.setUseParentHandlers(false);
044 }
045
046 @Override
047 public void close() {
048 _logRecords.clear();
049
050 _logger.removeHandler(this);
051
052 for (Handler handler : _handlers) {
053 _logger.addHandler(handler);
054 }
055
056 _logger.setLevel(_level);
057 _logger.setUseParentHandlers(_useParentHandlers);
058 }
059
060 @Override
061 public void flush() {
062 _logRecords.clear();
063 }
064
065 public List<LogRecord> getLogRecords() {
066 return _logRecords;
067 }
068
069 @Override
070 public boolean isLoggable(LogRecord logRecord) {
071 return false;
072 }
073
074 @Override
075 public void publish(LogRecord logRecord) {
076 _logRecords.add(logRecord);
077 }
078
079 public List<LogRecord> resetLogLevel(Level level) {
080 _logRecords.clear();
081
082 _logger.setLevel(level);
083
084 return _logRecords;
085 }
086
087 private final Handler[] _handlers;
088 private final Level _level;
089 private final Logger _logger;
090 private final List<LogRecord> _logRecords = new CopyOnWriteArrayList<>();
091 private final boolean _useParentHandlers;
092
093 }