comparison src/org/tmatesoft/hg/internal/StreamLogFacility.java @ 295:981f9f50bb6c

Issue 11: Error log facility. SessionContext to share common facilities
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 16 Sep 2011 05:35:32 +0200
parents
children 909306e412e2
comparison
equal deleted inserted replaced
294:32890bab7209 295:981f9f50bb6c
1 /*
2 * Copyright (c) 2011 TMate Software Ltd
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * For information on how to redistribute this software under
14 * the terms of a license other than GNU General Public License
15 * contact TMate Software at support@hg4j.com
16 */
17 package org.tmatesoft.hg.internal;
18
19 import java.io.PrintStream;
20
21 import org.tmatesoft.hg.util.LogFacility;
22
23 /**
24 * Primitive implementation of {@link LogFacility} that directs all output to specified {@link PrintStream}.
25 *
26 * @author Artem Tikhomirov
27 * @author TMate Software Ltd.
28 */
29 public class StreamLogFacility implements LogFacility {
30
31 private final boolean isDebug;
32 private final boolean isInfo;
33 protected final boolean timestamp;
34 protected final PrintStream outStream;
35
36 public StreamLogFacility(boolean pringDebug, boolean printInfo, boolean needTimestamp, PrintStream out) {
37 isDebug = pringDebug;
38 isInfo = printInfo;
39 timestamp = needTimestamp;
40 outStream = out;
41 }
42
43 public boolean isDebug() {
44 return isDebug;
45 }
46
47 public boolean isInfo() {
48 return isInfo;
49 }
50
51 public void debug(Class<?> src, String format, Object... args) {
52 if (!isDebug) {
53 return;
54 }
55 printf("DEBUG", src, format, args);
56 }
57
58 public void info(Class<?> src, String format, Object... args) {
59 if (!isInfo) {
60 return;
61 }
62 printf("INFO", src, format, args);
63 }
64
65 public void warn(Class<?> src, String format, Object... args) {
66 printf("WARN", src, format, args);
67 }
68
69 public void error(Class<?> src, String format, Object... args) {
70 printf("ERROR", src, format, args);
71 }
72
73 public void debug(Class<?> src, Throwable th, String message) {
74 if (!isDebug) {
75 return;
76 }
77 printf("DEBUG", src, th, message);
78 }
79
80 public void info(Class<?> src, Throwable th, String message) {
81 if (!isInfo) {
82 return;
83 }
84 printf("INFO", src, th, message);
85 }
86
87 public void warn(Class<?> src, Throwable th, String message) {
88 printf("WARN", src, th, message);
89 }
90
91 public void error(Class<?> src, Throwable th, String message) {
92 printf("ERROR", src, th, message);
93 }
94
95 protected void printf(String level, Class<?> src, String format, Object... args) {
96 String msg = String.format(format, args);
97 if (timestamp) {
98 outStream.printf(isDebug ? "%tT.%1$tL " : "%tT ", System.currentTimeMillis());
99 }
100 if (isDebug) {
101 String cn = src.getName();
102 if (cn.startsWith("org.tmatesoft.hg.")) {
103 cn = "oth." + cn.substring("org.tmatesoft.hg.".length());
104 }
105 outStream.printf("(%s) ", cn);
106 }
107 outStream.printf("%s: %s", level, msg);
108 if (format.length() == 0 || format.charAt(format.length() - 1) != '\n') {
109 outStream.println();
110 }
111 }
112 protected void printf(String level, Class<?> src, Throwable th, String msg) {
113 if (msg != null || timestamp || isDebug || th == null) {
114 printf(level, src, msg == null ? "" : msg, (Object[]) null);
115 }
116 if (th != null) {
117 if (isDebug || isInfo) {
118 // full stack trace
119 th.printStackTrace(outStream);
120 } else {
121 // just title of the exception
122 outStream.printf("%s: %s\n", th.getClass().getName(), th.getMessage());
123 }
124 }
125 }
126
127 // alternative to hardcore System.out where SessionContext is not available now (or ever)
128 public static LogFacility newDefault() {
129 return new StreamLogFacility(true, true, true, System.out);
130 }
131 }