1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.access;
11
12 import java.util.HashMap;
13 import java.util.Map;
14
15 import ch.qos.logback.access.pattern.ContentLengthConverter;
16 import ch.qos.logback.access.pattern.DateConverter;
17 import ch.qos.logback.access.pattern.EnsureLineSeparation;
18 import ch.qos.logback.access.pattern.FullRequestConverter;
19 import ch.qos.logback.access.pattern.FullResponseConverter;
20 import ch.qos.logback.access.pattern.LineSeparatorConverter;
21 import ch.qos.logback.access.pattern.LocalIPAddressConverter;
22 import ch.qos.logback.access.pattern.LocalPortConverter;
23 import ch.qos.logback.access.pattern.NAConverter;
24 import ch.qos.logback.access.pattern.RemoteHostConverter;
25 import ch.qos.logback.access.pattern.RemoteIPAddressConverter;
26 import ch.qos.logback.access.pattern.RemoteUserConverter;
27 import ch.qos.logback.access.pattern.RequestAttributeConverter;
28 import ch.qos.logback.access.pattern.RequestContentConverter;
29 import ch.qos.logback.access.pattern.RequestCookieConverter;
30 import ch.qos.logback.access.pattern.RequestHeaderConverter;
31 import ch.qos.logback.access.pattern.RequestMethodConverter;
32 import ch.qos.logback.access.pattern.RequestParameterConverter;
33 import ch.qos.logback.access.pattern.RequestProtocolConverter;
34 import ch.qos.logback.access.pattern.RequestURIConverter;
35 import ch.qos.logback.access.pattern.RequestURLConverter;
36 import ch.qos.logback.access.pattern.ResponseContentConverter;
37 import ch.qos.logback.access.pattern.ResponseHeaderConverter;
38 import ch.qos.logback.access.pattern.ServerNameConverter;
39 import ch.qos.logback.access.pattern.StatusCodeConverter;
40 import ch.qos.logback.access.spi.AccessEvent;
41 import ch.qos.logback.core.pattern.PatternLayoutBase;
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public class PatternLayout extends PatternLayoutBase<AccessEvent> {
59
60 public static final Map<String, String> defaultConverterMap = new HashMap<String, String>();
61
62 public static String CLF_PATTERN = "%h %l %u %t \"%r\" %s %b";
63 public static String CLF_PATTERN_NAME = "common";
64 public static String CLF_PATTERN_NAME_2 = "clf";
65 public static String COMBINED_PATTERN = "%h %l %u %t \"%r\" %s %b \"%i{Referer}\" \"%i{User-Agent}\"";
66 public static String COMBINED_PATTERN_NAME = "combined";
67
68 static {
69
70 defaultConverterMap.put("a", RemoteIPAddressConverter.class.getName());
71 defaultConverterMap.put("remoteIP", RemoteIPAddressConverter.class
72 .getName());
73
74 defaultConverterMap.put("A", LocalIPAddressConverter.class.getName());
75 defaultConverterMap.put("localIP", LocalIPAddressConverter.class.getName());
76
77 defaultConverterMap.put("b", ContentLengthConverter.class.getName());
78 defaultConverterMap.put("B", ContentLengthConverter.class.getName());
79 defaultConverterMap
80 .put("bytesSent", ContentLengthConverter.class.getName());
81
82 defaultConverterMap.put("h", RemoteHostConverter.class.getName());
83 defaultConverterMap.put("clientHost", RemoteHostConverter.class.getName());
84
85 defaultConverterMap.put("H", RequestProtocolConverter.class.getName());
86 defaultConverterMap.put("protocol", RequestProtocolConverter.class
87 .getName());
88
89 defaultConverterMap.put("i", RequestHeaderConverter.class.getName());
90 defaultConverterMap.put("header", RequestHeaderConverter.class.getName());
91
92 defaultConverterMap.put("l", NAConverter.class.getName());
93
94 defaultConverterMap.put("m", RequestMethodConverter.class.getName());
95 defaultConverterMap.put("requestMethod", RequestMethodConverter.class
96 .getName());
97
98 defaultConverterMap.put("r", RequestURLConverter.class.getName());
99 defaultConverterMap.put("requestURL", RequestURLConverter.class.getName());
100
101 defaultConverterMap.put("s", StatusCodeConverter.class.getName());
102 defaultConverterMap.put("statusCode", StatusCodeConverter.class.getName());
103
104 defaultConverterMap.put("t", DateConverter.class.getName());
105 defaultConverterMap.put("date", DateConverter.class.getName());
106
107 defaultConverterMap.put("u", RemoteUserConverter.class.getName());
108 defaultConverterMap.put("user", RemoteUserConverter.class.getName());
109
110 defaultConverterMap.put("U", RequestURIConverter.class.getName());
111 defaultConverterMap.put("requestURI", RequestURIConverter.class.getName());
112
113 defaultConverterMap.put("v", ServerNameConverter.class.getName());
114 defaultConverterMap.put("server", ServerNameConverter.class.getName());
115
116 defaultConverterMap.put("localPort", LocalPortConverter.class.getName());
117
118 defaultConverterMap.put("requestAttribute", RequestAttributeConverter.class
119 .getName());
120 defaultConverterMap.put("reqAttribute", RequestAttributeConverter.class
121 .getName());
122
123 defaultConverterMap
124 .put("reqCookie", RequestCookieConverter.class.getName());
125 defaultConverterMap
126 .put("requestCookie", RequestCookieConverter.class.getName());
127
128
129 defaultConverterMap.put("responseHeader", ResponseHeaderConverter.class
130 .getName());
131
132
133 defaultConverterMap.put("requestParameter", RequestParameterConverter.class
134 .getName());
135 defaultConverterMap.put("reqParameter", RequestParameterConverter.class
136 .getName());
137
138 defaultConverterMap.put("requestContent", RequestContentConverter.class.getName());
139
140 defaultConverterMap.put("responseContent", ResponseContentConverter.class.getName());
141
142 defaultConverterMap.put("fullRequest", FullRequestConverter.class.getName());
143 defaultConverterMap.put("fullResponse", FullResponseConverter.class.getName());
144
145
146 defaultConverterMap.put("n", LineSeparatorConverter.class.getName());
147 }
148
149
150 public PatternLayout() {
151
152 setPattern(CLF_PATTERN);
153
154 this.postCompileProcessor = new EnsureLineSeparation();
155 }
156
157
158
159
160 public Map<String, String> getDefaultConverterMap() {
161 return defaultConverterMap;
162 }
163
164 public String doLayout(AccessEvent event) {
165 if (!isStarted()) {
166 return null;
167 }
168 return writeLoopOnConverters(event);
169 }
170
171 @Override
172 public void start() {
173 if (getPattern().equalsIgnoreCase(CLF_PATTERN_NAME)
174 || getPattern().equalsIgnoreCase(CLF_PATTERN_NAME_2)) {
175 setPattern(CLF_PATTERN);
176 } else if (getPattern().equalsIgnoreCase(COMBINED_PATTERN_NAME)) {
177 setPattern(COMBINED_PATTERN);
178 }
179 super.start();
180 }
181
182 }