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