1
2
3
4
5
6
7
8
9
10
11 package ch.qos.logback.access.html;
12
13 import static ch.qos.logback.core.CoreConstants.LINE_SEPARATOR;
14
15 import java.util.Map;
16
17 import ch.qos.logback.access.PatternLayout;
18 import ch.qos.logback.access.spi.AccessEvent;
19 import ch.qos.logback.core.html.HTMLLayoutBase;
20 import ch.qos.logback.core.pattern.Converter;
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class HTMLLayout extends HTMLLayoutBase<AccessEvent> {
38
39
40
41
42 static final String DEFAULT_CONVERSION_PATTERN = "%h%l%u%t%r%s%b";
43
44
45
46
47
48 public HTMLLayout() {
49 pattern = DEFAULT_CONVERSION_PATTERN;
50 cssBuilder = new DefaultCssBuilder();
51 }
52
53 @Override
54 protected Map<String, String> getDefaultConverterMap() {
55 return PatternLayout.defaultConverterMap;
56 }
57
58 public String doLayout(AccessEvent event) {
59 StringBuilder buf = new StringBuilder();
60 startNewTableIfLimitReached(buf);
61
62 boolean odd = true;
63 if (((counter++) & 1) == 0) {
64 odd = false;
65 }
66
67 buf.append(LINE_SEPARATOR);
68 buf.append("<tr class=\"");
69 if (odd) {
70 buf.append(" odd\">");
71 } else {
72 buf.append(" even\">");
73 }
74 buf.append(LINE_SEPARATOR);
75
76 Converter<AccessEvent> c = head;
77 while (c != null) {
78 appendEventToBuffer(buf, c, event);
79 c = c.getNext();
80 }
81 buf.append("</tr>");
82 buf.append(LINE_SEPARATOR);
83
84 return buf.toString();
85 }
86
87 private void appendEventToBuffer(StringBuilder buf, Converter<AccessEvent> c,
88 AccessEvent event) {
89 buf.append("<td class=\"");
90 buf.append(computeConverterName(c));
91 buf.append("\">");
92 buf.append(c.convert(event));
93 buf.append("</td>");
94 buf.append(LINE_SEPARATOR);
95 }
96 }