/** * Copyright 2010 JBoss Inc * * Licensed 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.drools.guvnor.server.util; import java.util.Date; import org.drools.guvnor.client.rpc.LogEntry; import org.slf4j.LoggerFactory; /** * Collects messages for displaying in the GUI as well as providing a logger. * @author Michael Neale. * */ public class LoggingHelper { private final org.slf4j.Logger log; static final MessageList messages = new MessageList(); public static LogEntry[] getMessages() { return messages.getMessages(); } public static void cleanLog() { messages.cleanEntry(); } public static LoggingHelper getLogger(Class< ? > cls) { return new LoggingHelper( cls ); } private LoggingHelper(Class< ? > cls) { log = LoggerFactory.getLogger( cls ); } public void info(String message) { log.info( message ); messages.add( message, 1 ); } public void info(String message, Throwable error) { log.info( message, error ); messages.add( message + " " + error.getMessage(), 1 ); } public void debug(String message) { log.debug( message ); } public void error(String message) { log.error( message ); messages.add( message, 0 ); } public void error(String message, Throwable error) { log.error( message, error ); messages.add( message + " " + error.getMessage(), 0 ); } public void warn(String message) { log.warn( message ); } } class MessageList { static int MAX = 500; LogEntry[] messages = new LogEntry[MAX]; int current = 0; public MessageList() { } public synchronized void add(String message, int severity) { LogEntry entry = new LogEntry(); entry.message = message; entry.timestamp = new Date(); entry.severity = severity; if ( current == MAX ) { current = 0; } messages[current++] = entry; } public LogEntry[] getMessages() { return messages; } public synchronized void cleanEntry() { messages = new LogEntry[MAX]; } }