Skip to content

Commit a338d86

Browse files
committed
Merge branch 'develop'
2 parents a78d471 + d52ce16 commit a338d86

30 files changed

+290
-277
lines changed

.docker/Dockerfile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# docker build --build-arg http_proxy=http://172.16.4.26:17777 --build-arg https_proxy=http://172.16.4.26:17777
2-
FROM ppcelery/gobase:1.13.6-alpine3.11 AS gobuild
2+
FROM ppcelery/gobase:1.14.0-alpine3.11 AS gobuild
33

44
ENV GO111MODULE=on
55
WORKDIR /go-fluentd
@@ -9,7 +9,8 @@ RUN go mod download
99

1010
# static build
1111
ADD . .
12-
RUN go build -a --ldflags '-extldflags "-static"' entrypoints/main.go
12+
# RUN CGO_ENABLED=0 go build -a -ldflags '-w -extldflags "-static"' entrypoints/main.go
13+
RUN go build -a -ldflags '-w -extldflags "-static"' entrypoints/main.go
1314

1415

1516
# copy executable file and certs to a pure container

.docker/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@ go mod download
1717
go mod vendor
1818

1919
# build base image
20-
docker build . -f ./.docker/gobase.Dockerfile -t ppcelery/gobase:1.13.6-alpine3.11
21-
docker push ppcelery/gobase:1.13.6-alpine3.11
20+
docker build . -f ./.docker/gobase.Dockerfile -t ppcelery/gobase:1.14.0-alpine3.11
21+
docker push ppcelery/gobase:1.14.0-alpine3.11
2222

2323
# build image
24-
docker build . -f ./.docker/Dockerfile -t ppcelery/go-fluentd:1.12.6
25-
docker push ppcelery/go-fluentd:1.12.6
24+
docker build . -f ./.docker/Dockerfile -t ppcelery/go-fluentd:1.12.7
25+
docker push ppcelery/go-fluentd:1.12.7
2626

2727
docker run -it --rm \
2828
--net=host \
2929
-v /opt/configs/go-fluentd:/etc/go-fluentd \
3030
-v /data/log/fluentd/go-concator:/data/log/fluentd/go-concator \
31-
ppcelery/go-fluentd:1.12.6 \
31+
ppcelery/go-fluentd:1.12.7 \
3232
./go-fluentd --config=/etc/go-fluentd --env=prod --addr=0.0.0.0:22800 --log-level=error
3333
```
3434

.docker/gobase.Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# docker build . -f ./.docker/gobase.Dockerfile -t ppcelery/gobase:1.13.6-alpine3.11
2-
# docker push ppcelery/gobase:1.13.6-alpine3.11
3-
FROM golang:1.13.6-alpine3.11
1+
# docker build . -f ./.docker/gobase.Dockerfile -t ppcelery/gobase:1.14.0-alpine3.11
2+
# docker push ppcelery/gobase:1.14.0-alpine3.11
3+
FROM golang:1.14.0-alpine3.11
44

55
# run dependencies
66
RUN apk update && apk upgrade && \

.docker/test.Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# docker build . -f ./.docker/test.Dockerfile -t ppcelery/go-fluentd-test:v1
22
# docker push ppcelery/go-fluentd-test:v1
3-
FROM ppcelery/gobase:1.13.6-alpine3.11
3+
FROM ppcelery/gobase:1.14.0-alpine3.11
44
ENV GO111MODULE=on
55

66
WORKDIR /go-fluentd

.scripts/generate_changelog.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags | grep -v '^$'
1515
fi
1616

1717
echo ' ' >> CHANGELOG.md
18-
GIT_PAGER=cat git log --no-merges --date=short --invert-grep --grep=^Merge --pretty=format:'- %ad (%an) %s -> [view commit](http://gitlab.pateo.com.cn:10080/PaaS/go-fluentd/commit/%H)' $TAG..$NEXT >> CHANGELOG.md
18+
GIT_PAGER=cat git log --no-merges --date=short --invert-grep --grep=^Merge --pretty=format:'- %ad (%an) %s -> [view commit](https://github.com/Laisky/go-fluentd/commit/%H)' $TAG..$NEXT >> CHANGELOG.md
1919
echo ' ' >> CHANGELOG.md
2020
NEXT=$TAG
2121
done

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ language: go
33
sudo: false
44

55
go:
6-
- 1.11.x
76
- 1.12.x
7+
- 1.13.x
8+
- 1.14.x
89

910
env:
1011
- GO111MODULE=on

CHANGELOG.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
- 2020-01-10 (Laisky) docs: typo
4646
- 2020-01-10 (Laisky) style: change some vars name
4747
- 2020-01-07 (Laisky) fix: detect log-alert config
48-
- 2020-01-07 (Laisky) feat: enable pateo & telegram alert
49-
- 2020-01-07 (Laisky) fix: pateo alert pusher
50-
- 2020-01-06 (Laisky) feat: add pateo alert wechat service
48+
- 2020-01-07 (Laisky) feat: enable & telegram alert
49+
- 2020-01-07 (Laisky) fix: alert pusher
50+
- 2020-01-06 (Laisky) feat: add alert wechat service
5151
- 2020-01-03 (Laisky) fix: ignore es type conflict
5252
- 2020-01-03 (Laisky) fix: handle es return error
5353

@@ -507,4 +507,4 @@
507507
- 2018-12-06 (Laisky) fix: typo
508508
- 2018-12-06 (Laisky) feat(paas-220): support rsyslog recv
509509
- 2018-12-04 (Laisky) fix(paas-208): change flatten delimiter to "__"
510-
- 2018-12-04 (Laisky) build: rename to `pateo.com`
510+
- 2018-12-04 (Laisky) build: rename to .com`

Makefile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
1+
init:
2+
go get golang.org/x/tools/cmd/goimports
3+
# go get -u github.com/golang/protobuf/protoc-gen-go
4+
15
test:
26
@tox --recreate
37
@tox
48

59
changelog: CHANGELOG.md
610
sh ./.scripts/generate_changelog.sh
11+
12+
lint:
13+
# goimports -local oogway -w .
14+
gofmt -s -w .
15+
go mod tidy
16+
golangci-lint run

README.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ LogAggregator + Concator + Parser + Producer.
4343
Origin logs emitted from docker look like:
4444

4545
```
46-
'{"container_id": "xxxxx", "log": "2018-03-06 16:56:22.514 | mscparea | ERROR | http-nio-8080-exec-1 | com.pateo.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84:'
46+
'{"container_id": "xxxxx", "log": "2018-03-06 16:56:22.514 | mscparea | ERROR | http-nio-8080-exec-1 | com.laisky.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84:'
4747
'{"container_id": "xxxxx", "log": "Exception in thread "main" java.lang.IllegalStateException: A book has a null property"}'
4848
'{"container_id": "xxxxx", "log": "\tat com.example.myproject.Author.getBookIds(Author.java:38)"}'
4949
'{"container_id": "xxxxx", "log": "\tat com.example.myproject.Bootstrap.main(Bootstrap.java:14)"}'
@@ -61,7 +61,7 @@ After Concator(TagPipeline > concator_f):
6161
Tag: "spring.sit",
6262
Message: map[string]interface{}{
6363
"container_id": "xxxxx",
64-
"log": "2018-03-06 16:56:22.514 | mscparea | ERROR | http-nio-8080-exec-1 | com.pateo.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: Exception in thread "main" java.lang.IllegalStateException: A book has a null property\n\tat com.example.myproject.Author.getBookIds(Author.java:38)\n\tat com.example.myproject.Bootstrap.main(Bootstrap.java:14)\nCaused by: java.lang.NullPointerException\n\tat com.example.myproject.Book.getId(Book.java:22)\n\tat com.example.myproject.Author.getBookIds(Author.java:35)\n\t... 1 more",
64+
"log": "2018-03-06 16:56:22.514 | mscparea | ERROR | http-nio-8080-exec-1 | com.laisky.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: Exception in thread "main" java.lang.IllegalStateException: A book has a null property\n\tat com.example.myproject.Author.getBookIds(Author.java:38)\n\tat com.example.myproject.Bootstrap.main(Bootstrap.java:14)\nCaused by: java.lang.NullPointerException\n\tat com.example.myproject.Book.getId(Book.java:22)\n\tat com.example.myproject.Author.getBookIds(Author.java:35)\n\t... 1 more",
6565
},
6666
}
6767
```
@@ -78,7 +78,7 @@ After Parser(TagPipeline > parser_f):
7878
"level": "ERROR",
7979
"app": "mscparea",
8080
"thread": "http-nio-8080-exec-1",
81-
"class": "com.pateo.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest",
81+
"class": "com.laisky.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest",
8282
"line": 84,
8383
"message": "Exception in thread "main" java.lang.IllegalStateException: A book has a null property\n\tat com.example.myproject.Author.getBookIds(Author.java:38)\n\tat com.example.myproject.Bootstrap.main(Bootstrap.java:14)\nCaused by: java.lang.NullPointerException\n\tat com.example.myproject.Book.getId(Book.java:22)\n\tat com.example.myproject.Author.getBookIds(Author.java:35)\n\t... 1 more",
8484
},
@@ -94,7 +94,8 @@ Then Producer can send logs to anywhere (depends on Senders).
9494
directly run:
9595

9696
```sh
97-
go run -race entrypoints/main.go --config=/Users/laisky/repo/pateo/configs/go-fluentd/localtest --env=sit --log-level=debug
97+
go run -race entrypoints/main.go --config=./docs/settings/settings_cn.yml --env=sit --log-l
98+
evel=debug
9899
```
99100

100101
run by docker:
@@ -172,5 +173,3 @@ All filters should return very fast to avoid blocking.
172173
### Producer
173174

174175
...
175-
176-

acceptorFilters/spring_f.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func (f *SpringFilter) Filter(msg *libs.FluentMsg) *libs.FluentMsg {
7272
// retag spring to cp/bot/app.spring
7373
for _, rule := range f.Rules {
7474
if rule.Regexp.Match(msg.Message[f.MsgKey].([]byte)) {
75+
utils.Logger.Debug("rewrite tag", zap.String("old", msg.Tag), zap.String("new", rule.NewTag))
7576
msg.Tag = rule.NewTag
7677
msg.Message[f.TagKey] = msg.Tag
7778
f.upstreamChan <- msg

controllor.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import (
1515
"github.com/Laisky/go-fluentd/recvs"
1616
"github.com/Laisky/go-fluentd/senders"
1717
"github.com/Laisky/go-fluentd/tagFilters"
18+
"github.com/Laisky/go-kafka"
1819
utils "github.com/Laisky/go-utils"
19-
"github.com/Laisky/go-utils/kafka"
2020
"github.com/Laisky/zap"
2121
"github.com/cespare/xxhash"
2222
)
@@ -445,7 +445,7 @@ func (c *Controllor) initSenders(env string) []senders.SenderItf {
445445
TagIndexMap: senders.LoadESTagIndexMap(env, utils.Settings.Get("settings.producer.plugins."+name+".indices")),
446446
IsDiscardWhenBlocked: utils.Settings.GetBool("settings.producer.plugins." + name + ".is_discard_when_blocked"),
447447
}))
448-
case "null":
448+
case "stdout":
449449
ss = append(ss, senders.NewNullSender(&senders.NullSenderCfg{
450450
Name: name,
451451
Tags: libs.LoadTagsAppendEnv(env, utils.Settings.GetStringSlice("settings.producer.plugins."+name+".tags")),

docs/example/go-fluentd/settings.yml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,31 @@ settings:
1313
sync_out_chan_size: 10000
1414
max_rotate_id: 372036854775807 # do not change to smaller number
1515
recvs:
16-
plugins:
16+
# 监听 DC/OS fluentd log-driver 的日志
1717
fluentd:
1818
type: fluentd
19-
active_env:
20-
- sit
19+
active_env: *all-env
2120
tag_key: tag
21+
lb_key: container_id
22+
nfork: 1
23+
internal_buf_size: 5000
2224
addr: 0.0.0.0:24225
2325
is_rewrite_tag_from_tag_key: false
24-
concat_max_len: 100000
26+
concat_max_len: 300000
2527
concat:
2628
test:
29+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
2730
msg_key: log
2831
identifier: container_id
29-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
30-
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} {0,}\|
32+
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
3133
producer:
3234
discard_chan_size: 50000
3335
sender_inchan_size: 50000
3436
plugins:
3537
localtest:
3638
active_env: *all-env
3739
tags: *all-tags
38-
type: "null"
40+
type: "stdout"
3941
forks: 5
4042
log_level: info
4143
is_commit: true
@@ -88,7 +90,7 @@ settings:
8890
tags:
8991
- test
9092
msg_key: log
91-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
93+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
9294
pattern: (?ms)^(?P<time>.{23}) {0,}\| {0,}(?P<app>[^\|]+) {0,}\| {0,}(?P<level>[^\|]+) {0,}\| {0,}(?P<thread>[^\|]+) {0,}\| {0,}(?P<class>[^ ]+) {0,}\| {0,}(?P<line>\d+) {0,}([\|:] {0,}(?P<args>\{.*\}))?([\|:] {0,}(?P<message>.*))?
9395
is_remove_orig_log: true
9496
must_include: app
@@ -115,5 +117,5 @@ settings:
115117
# test:
116118
# msg_key: log
117119
# identifier: container_id
118-
# # 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
120+
# # 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
119121
# regex: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} {0,}\|

docs/settings/settings.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -183,22 +183,22 @@ settings:
183183
identifier: pod_name
184184
head_regexp: ^\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}Z *-
185185
spring:
186-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
186+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
187187
msg_key: log
188188
identifier: pod_name
189189
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
190190
tsp:
191-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
191+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
192192
msg_key: log
193193
identifier: pod_name
194194
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
195195
ai:
196-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
196+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
197197
msg_key: log
198198
identifier: pod_name
199199
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
200200
base:
201-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
201+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
202202
msg_key: log
203203
identifier: pod_name
204204
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
@@ -261,22 +261,22 @@ settings:
261261
identifier: container_id
262262
head_regexp: ^\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}Z *-
263263
spring:
264-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
264+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
265265
msg_key: log
266266
identifier: container_id
267267
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
268268
tsp:
269-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
269+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
270270
msg_key: log
271271
identifier: container_id
272272
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
273273
ai:
274-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
274+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
275275
msg_key: log
276276
identifier: container_id
277277
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
278278
base:
279-
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.qingcloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
279+
# 2018-03-06 16:56:22.514 | mscparea | INFO | http-nio-8080-exec-1 | com.google.cloud.cp.core.service.impl.CPBusiness.reflectAdapterRequest | 84: test
280280
msg_key: log
281281
identifier: container_id
282282
head_regexp: ^\d{4}-\d{2}-\d{2} +\d{2}:\d{2}:\d{2}\.\d{3} *\|
@@ -440,7 +440,7 @@ settings:
440440
tags: *all-tags
441441

442442
# 指定 plugin 的类型,目前只有几种支持的类型
443-
type: "null"
443+
type: "stdout"
444444

445445
# 指定该 plugin 的并行数
446446
forks: 5
@@ -759,10 +759,10 @@ settings:
759759
msg_key: log
760760

761761
# 一些 msg 字符串的例子
762-
# 2018-04-02 02:02:10.928 | sh-datamining | INFO | http-nio-8080-exec-80 | com.google.qingcloud.gateway.core.zuul.filters.post.LogFilter | 74 | {"key": "value"}: xxx
763-
# 2018-04-02 02:02:10.928 | sh-datamining | INFO | http-nio-8080-exec-80 | com.google.qingcloud.gateway.core.zuul.filters.post.LogFilter | 74 | xxx
764-
# 2018-03-12 02:02:10.928 | gateway | INFO | http-nio-8080-exec-80 | com.google.qingcloud.gateway.core.zuul.filters.post.LogFilter | 74: {"key": "value"}:xxx
765-
# 2019-02-18 15:42:06.635 | usertracking | DEBUG | kafka-producer-network-thread | producer-1 | com.google.qingcloud.base.usertracking.service.KafkaServiceBase$ProducerCallBack | 63: onCompletion when sendMessage to topic:UserTracking,partition:0 success!!
762+
# 2018-04-02 02:02:10.928 | sh-datamining | INFO | http-nio-8080-exec-80 | com.google.cloud.gateway.core.zuul.filters.post.LogFilter | 74 | {"key": "value"}: xxx
763+
# 2018-04-02 02:02:10.928 | sh-datamining | INFO | http-nio-8080-exec-80 | com.google.cloud.gateway.core.zuul.filters.post.LogFilter | 74 | xxx
764+
# 2018-03-12 02:02:10.928 | gateway | INFO | http-nio-8080-exec-80 | com.google.cloud.gateway.core.zuul.filters.post.LogFilter | 74: {"key": "value"}:xxx
765+
# 2019-02-18 15:42:06.635 | usertracking | DEBUG | kafka-producer-network-thread | producer-1 | com.google.cloud.base.usertracking.service.KafkaServiceBase$ProducerCallBack | 63: onCompletion when sendMessage to topic:UserTracking,partition:0 success!!
766766

767767
# 对消息字符串进行正则匹配,区分出不同的 named group,然后将各个 group 存放进 `msg.Message`
768768
pattern: (?ms)^(?P<time>.{23}) *\| *(?P<app>[^|]+) *\| *(?P<level>[^|]+) *\| *(?P<thread>[^|]+) *\| *(?:(?P<producer>[\w\-]+) *\| *)?(?P<class>[^|]+) *\| *(?P<line>\d+) *(?:[|:] *(?P<args>\{.*\}))? *(?:[|:] *(?P<message>.*))?

0 commit comments

Comments
 (0)