1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.simple;
18
19 import org.apache.logging.log4j.Level;
20 import org.apache.logging.log4j.Marker;
21 import org.apache.logging.log4j.ThreadContext;
22 import org.apache.logging.log4j.message.Message;
23 import org.apache.logging.log4j.spi.AbstractLogger;
24 import org.apache.logging.log4j.util.PropsUtil;
25
26 import java.io.ByteArrayOutputStream;
27 import java.io.PrintStream;
28 import java.text.DateFormat;
29 import java.text.SimpleDateFormat;
30 import java.util.Date;
31 import java.util.Map;
32
33
34
35
36
37 public class SimpleLogger extends AbstractLogger {
38
39
40
41
42
43
44 private DateFormat dateFormatter = null;
45
46 private Level level;
47
48 private boolean showDateTime;
49
50 private boolean showContextMap;
51
52 private PrintStream stream;
53
54 private String logName;
55
56
57 public SimpleLogger(String name, Level defaultLevel, boolean showLogName, boolean showShortLogName,
58 boolean showDateTime, boolean showContextMap, String dateTimeFormat,
59 PropsUtil props, PrintStream stream) {
60 super(name);
61 String lvl = props.getStringProperty(SimpleLoggerContext.SYSTEM_PREFIX + name + ".level");
62 this.level = Level.toLevel(lvl, defaultLevel);
63 if (showShortLogName) {
64 int index = name.lastIndexOf(".");
65 if (index > 0 && index < name.length()) {
66 this.logName = name.substring(index + 1);
67 } else {
68 this.logName = name;
69 }
70 } else if (showLogName) {
71 this.logName = name;
72 }
73 this.showDateTime = showDateTime;
74 this.showContextMap = showContextMap;
75 this.stream = stream;
76
77 if (showDateTime) {
78 try {
79 this.dateFormatter = new SimpleDateFormat(dateTimeFormat);
80 } catch(IllegalArgumentException e) {
81
82 this.dateFormatter = new SimpleDateFormat(SimpleLoggerContext.DEFAULT_DATE_TIME_FORMAT);
83 }
84 }
85 }
86
87 public void setStream(PrintStream stream) {
88 this.stream = stream;
89 }
90
91 public void setLevel(Level level) {
92 if (level != null) {
93 this.level = level;
94 }
95 }
96
97 @Override
98 public void log(Marker marker, String fqcn, Level level, Message msg, Throwable throwable) {
99 StringBuilder sb = new StringBuilder();
100
101 if(showDateTime) {
102 Date now = new Date();
103 String dateText;
104 synchronized(dateFormatter) {
105 dateText = dateFormatter.format(now);
106 }
107 sb.append(dateText);
108 sb.append(" ");
109 }
110
111 sb.append(level.toString());
112 sb.append(" ");
113 if (logName != null && logName.length() > 0) {
114 sb.append(logName);
115 sb.append(" ");
116 }
117 sb.append(msg.getFormattedMessage());
118 if (showContextMap) {
119 Map<String, String> mdc = ThreadContext.getContext();
120 if (mdc.size() > 0) {
121 sb.append(" ");
122 sb.append(mdc.toString());
123 sb.append(" ");
124 }
125 }
126 Object[] params = msg.getParameters();
127 Throwable t;
128 if (throwable == null && params != null && params[params.length -1] instanceof Throwable ) {
129 t = (Throwable) params[params.length - 1];
130 } else {
131 t = throwable;
132 }
133 if (t != null) {
134 sb.append(" ");
135 ByteArrayOutputStream baos = new ByteArrayOutputStream();
136 t.printStackTrace(new PrintStream(baos));
137 sb.append(baos.toString());
138 }
139 stream.println(sb.toString());
140 }
141
142 @Override
143 protected boolean isEnabled(Level level, Marker marker, String msg) {
144 return this.level.intLevel() >= level.intLevel();
145 }
146
147
148 @Override
149 protected boolean isEnabled(Level level, Marker marker, String msg, Throwable t) {
150 return this.level.intLevel() >= level.intLevel();
151 }
152
153 @Override
154 protected boolean isEnabled(Level level, Marker marker, String msg, Object... p1) {
155 return this.level.intLevel() >= level.intLevel();
156 }
157
158 @Override
159 protected boolean isEnabled(Level level, Marker marker, Object msg, Throwable t) {
160 return this.level.intLevel() >= level.intLevel();
161 }
162
163 @Override
164 protected boolean isEnabled(Level level, Marker marker, Message msg, Throwable t) {
165 return this.level.intLevel() >= level.intLevel();
166 }
167
168 }