1 /*
2 * Copyright (c) 2003-2008 by Cosylab d. d.
3 *
4 * This file is part of Java-Common.
5 *
6 * Java-Common is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * Java-Common is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with Java-Common. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 package com.cosylab.logging;
21
22 import java.io.ByteArrayInputStream;
23
24 import java.util.logging.Formatter;
25 import java.util.logging.Handler;
26 import java.util.logging.Level;
27 import java.util.logging.LogManager;
28 import java.util.logging.LogRecord;
29 import java.util.logging.Logger;
30
31
32 /**
33 * Implementation of Java Logging API handler.
34 *
35 * @author <a href="mailto:matej.sekoranjaATcosylab.com">Matej Sekoranja</a>
36 * @version $id$
37 */
38 public class ConsoleLogHandler extends Handler
39 {
40 /** Logging formatter. */
41 private Formatter formatter;
42
43 /**
44 * Default constructor.
45 */
46 public ConsoleLogHandler()
47 {
48 this(new ConsoleLogFormatter());
49 }
50
51 /**
52 * Construct handler with using giver formatter.
53 *
54 * @param formatter console log formatter, non-<code>null</code>.
55 */
56 public ConsoleLogHandler(Formatter formatter)
57 {
58 assert (formatter != null);
59 this.formatter = formatter;
60 }
61
62 /**
63 * @see java.util.logging.Handler#close()
64 */
65 public void close() throws SecurityException
66 {
67 // noop
68 }
69
70 /**
71 * @see java.util.logging.Handler#flush()
72 */
73 public void flush()
74 {
75 System.out.flush();
76 }
77
78 /**
79 * Prints the log record to the console using the current formatter, if the
80 * log record is loggable.
81 *
82 * @param record the log record to publish
83 *
84 * @see java.util.logging.Handler#publish(java.util.logging.LogRecord)
85 */
86 public void publish(LogRecord record)
87 {
88 if (isLoggable(record)) {
89 System.out.print(formatter.format(record));
90 }
91 }
92
93 /**
94 * Overrides default JVM logging configuration. This is convenience method
95 * - there is no need for additional configuration file and system
96 * property.
97 */
98 public static void initializeConsoleLogging()
99 {
100 try {
101 /*ClassLoader.getSystemClassLoader().loadClass(ConsoleLogHandler.class
102 .getName());*/
103
104 // to make sure class loaded, because of problems with JUnit class loader
105 /*ConsoleLogHandler clh= new ConsoleLogHandler();
106 clh.close();*/
107
108 ByteArrayInputStream bais = new ByteArrayInputStream(("handlers="
109 + ConsoleLogHandler.class.getName()).getBytes());
110 LogManager.getLogManager().readConfiguration(bais);
111 } catch (Throwable th) {
112 th.printStackTrace();
113 }
114 }
115
116 /**
117 * Simple test.
118 *
119 * @param args
120 */
121 public static void main(String[] args)
122 {
123 initializeConsoleLogging();
124
125 Logger logger = Logger.getLogger("loggerName");
126 logger.info("Testing: 1, 2, 3...");
127 logger.info("... 4, 5, 6.");
128 logger.setLevel(Level.ALL);
129 logger.finest("... finest");
130 }
131 }
132
133 /* __oOo__ */