package de.micromata.borgbutler.server.logging;
|
|
import org.apache.commons.lang3.ClassUtils;
|
import org.apache.log4j.spi.LocationInfo;
|
import org.apache.log4j.spi.LoggingEvent;
|
|
import java.io.PrintWriter;
|
import java.io.StringWriter;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
|
/**
|
* For easier serialization: JSON
|
*/
|
public class LoggingEventData implements Cloneable {
|
private SimpleDateFormat ISO_DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
int orderNumber;
|
LogLevel level;
|
String message;
|
private String messageObjectClass;
|
private String loggerName;
|
private String logDate;
|
String javaClass;
|
private String javaClassSimpleName;
|
private String lineNumber;
|
private String methodName;
|
private String stackTrace;
|
|
LoggingEventData() {
|
|
}
|
|
public LoggingEventData(LoggingEvent event) {
|
level = LogLevel.getLevel(event);
|
message = event.getRenderedMessage();
|
messageObjectClass = event.getMessage().getClass().toString();
|
loggerName = event.getLoggerName();
|
logDate = getIsoLogDate(event.timeStamp);
|
LocationInfo info = event.getLocationInformation();
|
Throwable throwable = event.getThrowableInformation() != null ? event.getThrowableInformation().getThrowable() : null;
|
if (throwable != null) {
|
StringWriter writer = new StringWriter();
|
PrintWriter printWriter = new PrintWriter(writer);
|
throwable.printStackTrace(printWriter);
|
stackTrace = writer.toString();
|
}
|
if (info != null) {
|
javaClass = info.getClassName();
|
javaClassSimpleName = ClassUtils.getShortClassName(info.getClassName());
|
lineNumber = info.getLineNumber();
|
methodName = info.getMethodName();
|
}
|
}
|
|
public LogLevel getLevel() {
|
return level;
|
}
|
|
public String getMessage() {
|
return message;
|
}
|
|
public String getMessageObjectClass() {
|
return messageObjectClass;
|
}
|
|
public String getLoggerName() {
|
return loggerName;
|
}
|
|
public String getLogDate() {
|
return logDate;
|
}
|
|
public String getJavaClass() {
|
return javaClass;
|
}
|
|
public String getJavaClassSimpleName() {
|
return javaClassSimpleName;
|
}
|
|
public String getLineNumber() {
|
return lineNumber;
|
}
|
|
public String getMethodName() {
|
return methodName;
|
}
|
|
public int getOrderNumber() {
|
return orderNumber;
|
}
|
|
public String getStackTrace() {
|
return stackTrace;
|
}
|
|
public void setMessage(String message) {
|
this.message = message;
|
}
|
|
private String getIsoLogDate(long millis) {
|
synchronized (ISO_DATEFORMAT) {
|
return ISO_DATEFORMAT.format(new Date(millis));
|
}
|
}
|
|
@Override
|
public Object clone() {
|
LoggingEventData clone = null;
|
try {
|
clone = (LoggingEventData) super.clone();
|
} catch (CloneNotSupportedException ex) {
|
throw new UnsupportedOperationException(this.getClass().getCanonicalName() + " isn't cloneable: " + ex.getMessage(), ex);
|
}
|
return clone;
|
}
|
|
}
|