java/sql-dk/src/main/java/info/globalcode/sql/dk/logging/ColorfulConsoleFormatter.java
3 * Copyright © 2013 František Kučera (frantovo.cz)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 3 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package info.globalcode.sql.dk.logging;
19 import info.globalcode.sql.dk.ColorfulPrintWriter;
20 import static info.globalcode.sql.dk.ColorfulPrintWriter.TerminalColor;
21 import static info.globalcode.sql.dk.ColorfulPrintWriter.TerminalStyle;
22 import static info.globalcode.sql.dk.Functions.rpad;
23 import java.io.StringWriter;
24 import java.util.logging.Formatter;
25 import java.util.logging.Level;
26 import java.util.logging.LogRecord;
29 * For console/terminal log output. Log messages are printed in brief and colorful form.
31 * @author Ing. František Kučera (frantovo.cz)
33 public class ColorfulConsoleFormatter extends Formatter {
35 private boolean printStacktrace = false;
38 public String format(LogRecord r) {
39 StringWriter sw = new StringWriter();
40 try (ColorfulPrintWriter out = new ColorfulPrintWriter(sw)) {
41 printLevel(out, r.getLevel());
43 printThrowable(out, r);
49 private void printLevel(ColorfulPrintWriter out, Level l) {
50 TerminalColor color = TerminalColor.Magenta;
52 if (l == Level.SEVERE) {
53 color = TerminalColor.Red;
54 } else if (l == Level.WARNING) {
55 color = TerminalColor.Yellow;
58 out.print(color, rpad(l.getLocalizedName() + ": ", 10));
61 private void printMessage(ColorfulPrintWriter out, LogRecord r) {
62 out.print(formatMessage(r));
65 private void printThrowable(ColorfulPrintWriter out, LogRecord r) {
66 Throwable t = r.getThrown();
69 out.print(TerminalColor.Red, t.getClass().getSimpleName());
70 String message = t.getLocalizedMessage();
71 if (message != null) {
73 if (printStacktrace) {
76 out.print(message.replaceAll("\\n", " "));
79 if (printStacktrace) {
81 out.setForegroundColor(TerminalColor.Yellow);
82 out.setStyle(TerminalStyle.Dim);
83 t.printStackTrace(out);
89 public boolean isPrintStacktrace() {
90 return printStacktrace;
93 public void setPrintStacktrace(boolean printStacktrace) {
94 this.printStacktrace = printStacktrace;