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