comparison src/org/tmatesoft/hg/internal/StreamLogFacility.java @ 456:909306e412e2

Refactor LogFacility and SessionContext, better API for both
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Mon, 18 Jun 2012 16:54:00 +0200
parents 981f9f50bb6c
children
comparison
equal deleted inserted replaced
454:36fd1fd06492 456:909306e412e2
14 * the terms of a license other than GNU General Public License 14 * the terms of a license other than GNU General Public License
15 * contact TMate Software at support@hg4j.com 15 * contact TMate Software at support@hg4j.com
16 */ 16 */
17 package org.tmatesoft.hg.internal; 17 package org.tmatesoft.hg.internal;
18 18
19 import static org.tmatesoft.hg.util.LogFacility.Severity.Info;
20
19 import java.io.PrintStream; 21 import java.io.PrintStream;
20 22
21 import org.tmatesoft.hg.util.LogFacility; 23 import org.tmatesoft.hg.util.LogFacility;
22 24
23 /** 25 /**
27 * @author TMate Software Ltd. 29 * @author TMate Software Ltd.
28 */ 30 */
29 public class StreamLogFacility implements LogFacility { 31 public class StreamLogFacility implements LogFacility {
30 32
31 private final boolean isDebug; 33 private final boolean isDebug;
32 private final boolean isInfo; 34 private final Severity severity;
33 protected final boolean timestamp; 35 protected final boolean timestamp;
34 protected final PrintStream outStream; 36 protected final PrintStream outStream;
35 37
36 public StreamLogFacility(boolean pringDebug, boolean printInfo, boolean needTimestamp, PrintStream out) { 38 public StreamLogFacility(Severity level, boolean needTimestamp, PrintStream out) {
37 isDebug = pringDebug; 39 assert level != null;
38 isInfo = printInfo; 40 severity = level;
41 isDebug = level == Severity.Debug;
39 timestamp = needTimestamp; 42 timestamp = needTimestamp;
40 outStream = out; 43 outStream = out;
41 } 44 }
42 45
43 public boolean isDebug() { 46 public boolean isDebug() {
44 return isDebug; 47 return isDebug;
45 } 48 }
46 49
47 public boolean isInfo() { 50 public Severity getLevel() {
48 return isInfo; 51 return severity;
49 } 52 }
50 53
51 public void debug(Class<?> src, String format, Object... args) { 54 public void dump(Class<?> src, Severity severity, String format, Object... args) {
52 if (!isDebug) { 55 if (severity.ordinal() >= getLevel().ordinal()) {
53 return; 56 printf(severity, src, format, args);
54 } 57 }
55 printf("DEBUG", src, format, args);
56 } 58 }
57 59
58 public void info(Class<?> src, String format, Object... args) { 60 public void dump(Class<?> src, Severity severity, Throwable th, String message) {
59 if (!isInfo) { 61 if (severity.ordinal() >= getLevel().ordinal()) {
60 return; 62 printf(severity, src, th, message);
61 } 63 }
62 printf("INFO", src, format, args);
63 } 64 }
64 65
65 public void warn(Class<?> src, String format, Object... args) { 66 protected void printf(Severity level, 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); 67 String msg = String.format(format, args);
97 if (timestamp) { 68 if (timestamp) {
98 outStream.printf(isDebug ? "%tT.%1$tL " : "%tT ", System.currentTimeMillis()); 69 outStream.printf(isDebug ? "%tT.%1$tL " : "%tT ", System.currentTimeMillis());
99 } 70 }
100 if (isDebug) { 71 if (isDebug) {
102 if (cn.startsWith("org.tmatesoft.hg.")) { 73 if (cn.startsWith("org.tmatesoft.hg.")) {
103 cn = "oth." + cn.substring("org.tmatesoft.hg.".length()); 74 cn = "oth." + cn.substring("org.tmatesoft.hg.".length());
104 } 75 }
105 outStream.printf("(%s) ", cn); 76 outStream.printf("(%s) ", cn);
106 } 77 }
107 outStream.printf("%s: %s", level, msg); 78 outStream.printf("%s: %s", level.toString().toUpperCase(), msg);
108 if (format.length() == 0 || format.charAt(format.length() - 1) != '\n') { 79 if (format.length() == 0 || format.charAt(format.length() - 1) != '\n') {
109 outStream.println(); 80 outStream.println();
110 } 81 }
111 } 82 }
112 protected void printf(String level, Class<?> src, Throwable th, String msg) { 83 protected void printf(Severity level, Class<?> src, Throwable th, String msg) {
113 if (msg != null || timestamp || isDebug || th == null) { 84 if (msg != null || timestamp || isDebug || th == null) {
114 printf(level, src, msg == null ? "" : msg, (Object[]) null); 85 printf(level, src, msg == null ? "" : msg, (Object[]) null);
115 } 86 }
116 if (th != null) { 87 if (th != null) {
117 if (isDebug || isInfo) { 88 if (getLevel().ordinal() <= Info.ordinal()) {
118 // full stack trace 89 // full stack trace
119 th.printStackTrace(outStream); 90 th.printStackTrace(outStream);
120 } else { 91 } else {
121 // just title of the exception 92 // just title of the exception
122 outStream.printf("%s: %s\n", th.getClass().getName(), th.getMessage()); 93 outStream.printf("%s: %s\n", th.getClass().getName(), th.getMessage());
124 } 95 }
125 } 96 }
126 97
127 // alternative to hardcore System.out where SessionContext is not available now (or ever) 98 // alternative to hardcore System.out where SessionContext is not available now (or ever)
128 public static LogFacility newDefault() { 99 public static LogFacility newDefault() {
129 return new StreamLogFacility(true, true, true, System.out); 100 return new StreamLogFacility(Severity.Debug, true, System.out);
130 } 101 }
131 } 102 }