/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.logging; import java.util.Date; import java.util.StringTokenizer; import java.util.logging.Level; import org.openflexo.kvc.KVCObject; import org.openflexo.xmlcode.StringEncoder; import org.openflexo.xmlcode.XMLSerializable; /** * This class is used to encode a simple log record in Flexo * * @author sguerin */ public class LogRecord extends KVCObject implements XMLSerializable { public Date date; public long millis; public long sequence; public String logger; public String className; public String methodName; public int threadId; public String message; public Level level; public StackTraceElement[] stackTrace; protected String _dateAsString = null; protected String _classAsString = null; protected String _millisAsString = null; protected String _sequenceAsString = null; protected String _threadAsString = null; public boolean isUnhandledException = false; public LogRecord() { super(); } public LogRecord(java.util.logging.LogRecord record, FlexoLoggingManager loggingManager) { super(); date = new Date(); millis = record.getMillis(); sequence = record.getSequenceNumber(); logger = record.getLoggerName(); className = record.getSourceClassName(); methodName = record.getSourceMethodName(); threadId = record.getThreadID(); message = record.getMessage(); if (message != null) { message = message.intern(); } level = record.getLevel(); if (loggingManager != null && loggingManager.getKeepLogTrace()) { stackTrace = new Exception().getStackTrace(); } isUnhandledException = false; } public LogRecord(java.util.logging.LogRecord record, Exception e, FlexoLoggingManager loggingManager) { this(record, loggingManager); stackTrace = e.getStackTrace(); className = stackTrace[0].getClassName(); methodName = stackTrace[0].getMethodName(); isUnhandledException = true; } public String dateAsString() { if (_dateAsString == null) { String dateFormat = StringEncoder.getDefaultInstance()._getDateFormat(); StringEncoder.getDefaultInstance()._setDateFormat("HH:mm:ss dd/MM"); _dateAsString = StringEncoder.getDefaultInstance()._getDateRepresentation(date); StringEncoder.getDefaultInstance()._setDateFormat(dateFormat); } return _dateAsString; } public String classAsString() { if (_classAsString == null && className != null) { StringTokenizer st = new StringTokenizer(className, "."); while (st.hasMoreTokens()) { _classAsString = st.nextToken(); } } return _classAsString; } public String millisAsString() { if (_millisAsString == null) { _millisAsString = StringEncoder.encodeLong(millis); } return _millisAsString; } public String sequenceAsString() { if (_sequenceAsString == null) { _sequenceAsString = StringEncoder.encodeLong(sequence); } return _sequenceAsString; } public String threadAsString() { if (_threadAsString == null) { _threadAsString = StringEncoder.encodeLong(threadId); } return _threadAsString; } public String getStackTraceAsString() { if (_stackTraceAsString != null) { return _stackTraceAsString; } else if (stackTrace != null) { StringBuilder returned = new StringBuilder(); int beginAt; if (isUnhandledException) { beginAt = 0; } else { beginAt = 6; } for (int i = beginAt; i < stackTrace.length; i++) { // returned += ("\tat " + stackTrace[i] + "\n"); returned.append("\t").append("at ").append(stackTrace[i]).append('\n'); } return returned.toString(); } else { return "StackTrace not available"; } } private String _stackTraceAsString; public void setStackTraceAsString(String aString) { _stackTraceAsString = aString; } }