1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.classic.net;
15
16 import ch.qos.logback.classic.ClassicConstants;
17 import ch.qos.logback.classic.PatternLayout;
18 import ch.qos.logback.classic.boolex.OnErrorEvaluator;
19 import ch.qos.logback.classic.spi.ILoggingEvent;
20 import ch.qos.logback.core.Layout;
21 import ch.qos.logback.core.boolex.EventEvaluator;
22 import ch.qos.logback.core.helpers.CyclicBuffer;
23 import ch.qos.logback.core.net.SMTPAppenderBase;
24 import org.slf4j.Marker;
25
26
27
28
29
30
31
32
33
34
35
36
37 public class SMTPAppender extends SMTPAppenderBase<ILoggingEvent> {
38
39
40 static final String DEFAULT_SUBJECT_PATTERN = "%logger{20} - %m";
41
42 private int bufferSize = 512;
43
44
45
46
47
48
49
50 public SMTPAppender() {
51
52 }
53
54 public void start() {
55 if (eventEvaluator == null) {
56 OnErrorEvaluator onError = new OnErrorEvaluator();
57 onError.setContext(getContext());
58 onError.setName("onError");
59 onError.start();
60 this.eventEvaluator = onError;
61 }
62 super.start();
63 }
64
65
66
67
68
69 public SMTPAppender(EventEvaluator<ILoggingEvent> eventEvaluator) {
70 this.eventEvaluator = eventEvaluator;
71 }
72
73
74
75
76
77 protected void subAppend(CyclicBuffer<ILoggingEvent> cb, ILoggingEvent event) {
78 event.prepareForDeferredProcessing();
79 cb.add(event);
80 }
81
82 @Override
83 protected void fillBuffer(CyclicBuffer<ILoggingEvent> cb, StringBuffer sbuf) {
84 int len = cb.length();
85 for (int i = 0; i < len; i++) {
86 ILoggingEvent event = cb.get();
87 sbuf.append(layout.doLayout(event));
88 }
89 }
90
91 protected boolean isEventMarkedForBufferRemoval(ILoggingEvent eventObject) {
92 Marker marker = eventObject.getMarker();
93 if(marker == null)
94 return false;
95
96 return marker.contains(ClassicConstants.FINALIZE_SESSION_MARKER);
97 }
98
99
100 @Override
101 protected Layout<ILoggingEvent> makeSubjectLayout(String subjectStr) {
102 if(subjectStr == null) {
103 subjectStr = DEFAULT_SUBJECT_PATTERN;
104 }
105 PatternLayout pl = new PatternLayout();
106 pl.setContext(getContext());
107 pl.setPattern(subjectStr);
108
109
110
111 pl.setPostCompileProcessor(null);
112 pl.start();
113 return pl;
114 }
115
116
117 protected PatternLayout makeNewToPatternLayout(String toPattern) {
118 PatternLayout pl = new PatternLayout();
119 pl.setPattern(toPattern+"%nopex");
120 return pl;
121 }
122 }