1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.classic.net;
15
16 import java.io.IOException;
17
18 import ch.qos.logback.classic.PatternLayout;
19 import ch.qos.logback.classic.pattern.SyslogStartConverter;
20 import ch.qos.logback.classic.spi.ILoggingEvent;
21 import ch.qos.logback.classic.spi.IThrowableProxy;
22 import ch.qos.logback.classic.spi.StackTraceElementProxy;
23 import ch.qos.logback.classic.util.LevelToSyslogSeverity;
24 import ch.qos.logback.core.CoreConstants;
25 import ch.qos.logback.core.Layout;
26 import ch.qos.logback.core.net.SyslogAppenderBase;
27 import ch.qos.logback.core.net.SyslogWriter;
28
29
30
31
32
33
34
35
36 public class SyslogAppender extends SyslogAppenderBase<ILoggingEvent> {
37
38 static final public String DEFAULT_SUFFIX_PATTERN = "[%thread] %logger %msg";
39
40 PatternLayout prefixLayout = new PatternLayout();
41
42 public Layout<ILoggingEvent> buildLayout(String facilityStr) {
43 String prefixPattern = "%syslogStart{" + facilityStr + "}%nopex";
44
45 prefixLayout.getInstanceConverterMap().put("syslogStart",
46 SyslogStartConverter.class.getName());
47 prefixLayout.setPattern(prefixPattern);
48 prefixLayout.setContext(getContext());
49 prefixLayout.start();
50
51 PatternLayout fullLayout = new PatternLayout();
52 fullLayout.getInstanceConverterMap().put("syslogStart",
53 SyslogStartConverter.class.getName());
54
55 if (suffixPattern == null) {
56 suffixPattern = DEFAULT_SUFFIX_PATTERN;
57 }
58
59 fullLayout.setPattern(prefixPattern + suffixPattern);
60 fullLayout.setContext(getContext());
61 fullLayout.start();
62 return fullLayout;
63 }
64
65
66
67
68
69
70
71 @Override
72 public int getSeverityForEvent(Object eventObject) {
73 ILoggingEvent event = (ILoggingEvent) eventObject;
74 return LevelToSyslogSeverity.convert(event);
75 }
76
77 @Override
78 protected void postProcess(Object eventObject, SyslogWriter sw) {
79 ILoggingEvent event = (ILoggingEvent) eventObject;
80
81 String prefix = prefixLayout.doLayout(event);
82
83 IThrowableProxy tp = event.getThrowableProxy();
84 while (tp != null) {
85 StackTraceElementProxy[] stepArray = tp.getStackTraceElementProxyArray();
86 try {
87 for (StackTraceElementProxy step : stepArray) {
88 sw.write(prefix);
89 sw.write(CoreConstants.TAB);
90 sw.write(step.toString());
91 sw.flush();
92 }
93 } catch (IOException e) {
94 break;
95 }
96 tp = tp.getCause();
97 }
98 }
99 }