InMemoryLoggingEvent.java
package sk.iway.iwcm.system.logging;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.ThrowableProxyUtil;
import ch.qos.logback.core.CoreConstants;
import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditor;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditorAttr;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
import java.util.stream.Collectors;
/**
* Bean, ktory drzi udaje log zaznamu v pamati
*/
@Getter
@Setter
public class InMemoryLoggingEvent implements Serializable {
@Id
@DataTableColumn(inputType = DataTableColumnType.ID, visible = false)
private Long id;
@DataTableColumn(inputType = DataTableColumnType.TEXT, tab="main", editor = {
@DataTableColumnEditor(attr = {
@DataTableColumnEditorAttr(key = "disabled", value = "disabled")
})
})
private String loggerName;
@DataTableColumn(inputType = DataTableColumnType.SELECT, tab="main", editor = {
@DataTableColumnEditor(attr = {
@DataTableColumnEditorAttr(key = "disabled", value = "disabled") }) })
private Level level;
@DataTableColumn(inputType = DataTableColumnType.DATETIME, tab="main", editor = {
@DataTableColumnEditor(attr = {
@DataTableColumnEditorAttr(key = "disabled", value = "disabled")
})
})
private Date date;
@DataTableColumn(inputType = DataTableColumnType.OPEN_EDITOR, tab="main", editor = {
@DataTableColumnEditor(attr = {
@DataTableColumnEditorAttr(key = "disabled", value = "disabled")
})
})
private String formattedMessage;
@DataTableColumn(inputType = DataTableColumnType.TEXTAREA, tab="main", visible = false, editor = {
@DataTableColumnEditor(attr = {
@DataTableColumnEditorAttr(key = "disabled", value = "disabled")
})
})
private String mdcPropertyMap;
@DataTableColumn(inputType = DataTableColumnType.TEXTAREA, tab="description", visible = false, editor = {
@DataTableColumnEditor(attr = {
@DataTableColumnEditorAttr(key = "class", value = "textarea-code")
})
})
private String stackTrace = "";
private String message;
public InMemoryLoggingEvent() {
}
public InMemoryLoggingEvent(ILoggingEvent eventObject) {
this.message = eventObject.getMessage();
this.formattedMessage = eventObject.getFormattedMessage();
this.loggerName = eventObject.getLoggerName();
this.level = eventObject.getLevel();
this.mdcPropertyMap = eventObject.getMDCPropertyMap() != null ? eventObject.getMDCPropertyMap().entrySet().stream().map(entry -> entry.getKey() + ": " + entry.getValue()).collect(Collectors.joining("\n")) : null;
this.date = new Date(eventObject.getTimeStamp());
IThrowableProxy throwableProxy = eventObject.getThrowableProxy();
if (throwableProxy != null) {
String throwableStr = ThrowableProxyUtil.asString(throwableProxy);
stackTrace += throwableStr;
stackTrace += CoreConstants.LINE_SEPARATOR;
}
}
public String getLevel() {
return level != null ? level.toString() : "UNKNOWN";
}
public String getMessage() {
if (Tools.isNotEmpty(message)) return message;
if (Tools.isNotEmpty(stackTrace)) {
int i = stackTrace.indexOf("\n");
if (i>0) return stackTrace.substring(0, i);
}
return "-----";
}
public String getFormattedMessage() {
if (Tools.isNotEmpty(formattedMessage)) return formattedMessage;
return getMessage();
}
}