1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.layout;
18
19 import org.apache.logging.log4j.core.LogEvent;
20
21 import java.io.UnsupportedEncodingException;
22 import java.nio.charset.Charset;
23
24
25
26
27 public abstract class AbstractStringLayout extends AbstractLayout<String> {
28
29
30
31
32 private final Charset charset;
33
34 private final StringEncoder encoder;
35
36 protected AbstractStringLayout(final Charset charset) {
37 this.charset = charset;
38 boolean useClass = false;
39 try {
40 if (String.class.getMethod("getBytes", new Class[] {Charset.class}) != null) {
41 useClass = true;
42 }
43 } catch (final NoSuchMethodException ex) {
44
45 }
46 encoder = useClass ? new ClassEncoder() : new NameEncoder();
47 }
48
49
50
51
52
53
54
55 public byte[] toByteArray(final LogEvent event) {
56 return encoder.getBytes(toSerializable(event));
57 }
58
59
60
61
62 public String getContentType() {
63 return "text/plain";
64 }
65
66 protected Charset getCharset() {
67 return charset;
68 }
69
70
71
72
73 private interface StringEncoder {
74
75 byte[] getBytes(String str);
76 }
77
78
79
80
81 private class ClassEncoder implements StringEncoder {
82 public byte[] getBytes(final String str) {
83 return str.getBytes(charset);
84 }
85 }
86
87
88
89
90 private class NameEncoder implements StringEncoder {
91 public byte[] getBytes(final String str) {
92 try {
93 return str.getBytes(charset.name());
94 } catch (final UnsupportedEncodingException ex) {
95
96 return str.getBytes();
97 }
98 }
99 }
100 }