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