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