Skip to content

Commit 6c51cff

Browse files
committed
feat(log): add encoder to avoid any external usage
1 parent e693d8a commit 6c51cff

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package org.tron.common.log.layout;
2+
3+
import ch.qos.logback.classic.Logger;
4+
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
5+
import ch.qos.logback.classic.spi.ILoggingEvent;
6+
import ch.qos.logback.core.Context;
7+
import ch.qos.logback.core.Layout;
8+
import java.nio.charset.Charset;
9+
import java.util.ArrayList;
10+
import java.util.HashMap;
11+
import java.util.List;
12+
import java.util.Map;
13+
14+
public class MultiLayoutPattern extends PatternLayoutEncoder {
15+
private List<Rule> rules = new ArrayList<>();
16+
private Map<String, Layout<ILoggingEvent>> layoutMap = new HashMap<>();
17+
18+
public void addRule(Rule rule) {
19+
this.rules.add(rule);
20+
rule.start(context);
21+
}
22+
23+
public byte[] encode(ILoggingEvent event) {
24+
Layout<ILoggingEvent> layout = getLayout(event.getLoggerName());
25+
String txt = layout.doLayout(event);
26+
return convertToBytes(txt);
27+
}
28+
29+
private byte[] convertToBytes(String s) {
30+
Charset charset = getCharset();
31+
if (charset == null) {
32+
return s.getBytes();
33+
} else {
34+
return s.getBytes(charset);
35+
}
36+
}
37+
38+
private Layout<ILoggingEvent> getLayout(final String name) {
39+
if (name == null) {
40+
throw new IllegalArgumentException("name cannot be null");
41+
}
42+
if (Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(name)) {
43+
return this.getLayout();
44+
}
45+
if (layoutMap.containsKey(name)) {
46+
return layoutMap.get(name);
47+
}
48+
Layout<ILoggingEvent> layout = getLayout();
49+
for (Rule rule : rules) {
50+
if (rule.logger.equals(name)) {
51+
layout = rule.getPatternLayoutEncoder().getLayout();
52+
break;
53+
}
54+
}
55+
layoutMap.put(name, layout);
56+
return layout;
57+
}
58+
59+
@Override
60+
public void start() {
61+
super.start();
62+
}
63+
64+
public static class Rule {
65+
private String logger;
66+
private String pattern;
67+
private PatternLayoutEncoder patternLayoutEncoder;
68+
private boolean outputPatternAsHeader = false;
69+
70+
public String getLogger() {
71+
return logger;
72+
}
73+
74+
public void setLogger(String logger) {
75+
this.logger = logger;
76+
}
77+
78+
public String getPattern() {
79+
return pattern;
80+
}
81+
82+
public void setPattern(String pattern) {
83+
this.pattern = pattern;
84+
}
85+
86+
public boolean isOutputPatternAsHeader() {
87+
return outputPatternAsHeader;
88+
}
89+
90+
public void setOutputPatternAsHeader(boolean outputPatternAsHeader) {
91+
this.outputPatternAsHeader = outputPatternAsHeader;
92+
}
93+
94+
public PatternLayoutEncoder getPatternLayoutEncoder() {
95+
return patternLayoutEncoder;
96+
}
97+
98+
public void start(Context context) {
99+
patternLayoutEncoder = new PatternLayoutEncoder();
100+
patternLayoutEncoder.setPattern(pattern);
101+
patternLayoutEncoder.setContext(context);
102+
patternLayoutEncoder.setOutputPatternAsHeader(outputPatternAsHeader);
103+
patternLayoutEncoder.start();
104+
}
105+
}
106+
}

0 commit comments

Comments
 (0)