blob: 117d265a2afb5301a2764026d0347e9f68bf5027 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE.txt file distributed with this work for
// additional information regarding copyright ownership. The ASF licenses this
// file to you under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
package org.apache.oodt.commons.util;
import java.beans.PropertyChangeEvent;
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
import org.apache.oodt.commons.io.LogListener;
import org.apache.oodt.commons.io.LogEvent;
/** In-memory logger.
*
* This logger maintains log messages in memory.
*
* @author Kelly
*/
public class MemoryLogger implements LogListener {
/** Create a memory logger.
*
* The size of the message cache comes from the system property <code>org.apache.oodt.commons.util.MemoryLogger.size</code>,
* or {@link #DEF_SIZE} if that property isn't specified.
*/
public MemoryLogger() {
this(Integer.getInteger("org.apache.oodt.commons.util.MemoryLogger.size", DEF_SIZE).intValue());
}
/** Create a memory logger.
*
* @param size Size of the message cache.
*/
public MemoryLogger(int size) {
this.size = size;
}
/** Get the list of messages logged so far.
*
* This returns a list of {@link String}s in time order.
*
* @return A list of message strings.
*/
public List getMessages() {
return (List) messages.clone();
}
/** Get the maximum size of the cache.
*
* @return The maximum size of the cache.
*/
public int getSize() {
return size;
}
/** Set the maximum size of the cache.
*
* @param size The new maximum cache size.
*/
public void setSize(int size) {
if (size < 0) throw new IllegalArgumentException("Log cache size can't be negative");
int delta = this.size - size;
this.size = size;
if (delta <= 0) return;
if (messages.size() < size) return;
while (delta-- > 0)
messages.removeFirst();
}
public void streamStarted(LogEvent ignore) {}
public void streamStopped(LogEvent ignore) {}
public void propertyChange(PropertyChangeEvent ignore) {}
public void messageLogged(LogEvent event) {
messages.add(DateConvert.isoFormat(event.getTimestamp()) + " " + event.getSource() + " " + event.getCategory()
+ ": " + event.getMessage());
if (messages.size() > size)
messages.removeFirst();
}
/** The list of messages. */
private LinkedList messages = new LinkedList();
/** Maximum size of message cache. */
private int size;
/** The default size of the message cache, 32. */
public static final int DEF_SIZE = 32;
}