|
1 | 1 | package common
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "encoding/json" |
4 | 5 | "io"
|
5 | 6 | "strings"
|
| 7 | + "time" |
6 | 8 |
|
7 | 9 | "github.com/alecthomas/atomic"
|
8 | 10 |
|
@@ -49,6 +51,13 @@ func (o *errorDetector) Write(p []byte) (n int, err error) {
|
49 | 51 | o.logger.Tracef("%s", cleanLine)
|
50 | 52 | } else if cleanLine, ok := strings.CutPrefix(line, "FINE "); ok {
|
51 | 53 | o.logger.Tracef("%s", cleanLine)
|
| 54 | + } else if line[0] == '{' { |
| 55 | + record := JvmLogRecord{} |
| 56 | + if err := json.Unmarshal([]byte(line), &record); err == nil { |
| 57 | + o.logger.Log(record.ToEntry()) |
| 58 | + } else { |
| 59 | + o.logger.Infof("Log Parse Failure: %s", line) |
| 60 | + } |
52 | 61 | } else {
|
53 | 62 | o.logger.Infof("%s", line)
|
54 | 63 | }
|
@@ -95,3 +104,46 @@ func (o *errorDetector) FinalizeCapture() []builderrors.Error {
|
95 | 104 | }
|
96 | 105 | return errs
|
97 | 106 | }
|
| 107 | + |
| 108 | +type JvmLogRecord struct { |
| 109 | + Timestamp time.Time `json:"timestamp"` |
| 110 | + Sequence int `json:"sequence"` |
| 111 | + LoggerClassName string `json:"loggerClassName"` |
| 112 | + LoggerName string `json:"loggerName"` |
| 113 | + Level string `json:"level"` |
| 114 | + Message string `json:"message"` |
| 115 | + ThreadName string `json:"threadName"` |
| 116 | + ThreadId int `json:"threadId"` |
| 117 | + Mdc any `json:"mdc"` |
| 118 | + Ndc string `json:"ndc"` |
| 119 | + HostName string `json:"hostName"` |
| 120 | + ProcessName string `json:"processName"` |
| 121 | + ProcessId int `json:"processId"` |
| 122 | +} |
| 123 | + |
| 124 | +func (r *JvmLogRecord) ToEntry() log.Entry { |
| 125 | + level := log.Info |
| 126 | + switch r.Level { |
| 127 | + case "DEBUG": |
| 128 | + level = log.Debug |
| 129 | + case "INFO": |
| 130 | + level = log.Info |
| 131 | + case "WARN", "WARNING": |
| 132 | + level = log.Warn |
| 133 | + case "ERROR", "SEVERE": |
| 134 | + level = log.Error |
| 135 | + case "FINE", "FINER": |
| 136 | + level = log.Debug |
| 137 | + case "FINEST", "TRACE": |
| 138 | + level = log.Trace |
| 139 | + default: |
| 140 | + r.Message = r.Level + ": " + r.Message |
| 141 | + } |
| 142 | + |
| 143 | + ret := log.Entry{ |
| 144 | + Time: r.Timestamp, |
| 145 | + Level: level, |
| 146 | + Message: r.Message, |
| 147 | + } |
| 148 | + return ret |
| 149 | +} |
0 commit comments