mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
14.20.2021 5e39c0040ddde260831a5b9f73c0bbfec3738f94
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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 LoggingEventData 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;
    }
}