File: LogUtil.java

package info (click to toggle)
libusb-java 0.8%2Bztex20090101-7
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 416 kB
  • ctags: 810
  • sloc: java: 1,102; ansic: 605; makefile: 98; sh: 29
file content (135 lines) | stat: -rw-r--r-- 4,084 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* 
 * Java libusb wrapper
 * Copyright (c) 2005-2006 Andreas Schlaepfer <spandi at users.sourceforge.net>
 *
 * http://libusbjava.sourceforge.net
 * This library is covered by the LGPL, read LGPL.txt for details.
 */
package ch.ntb.usb.logger;

import java.io.InputStream;
import java.util.Properties;
import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class LogUtil {

	// debug this class
	private static final boolean debugLogUtil = false;

	private static final String PLUGIN_ID = "ch.ntb.usb";
	private static final String PROPERTIES_FILE = ".configure";
	private static final String LOGGER_WARNING = "Warning in class "
			+ LogUtil.class.getName()
			+ ": could not load the logger properties file " + PROPERTIES_FILE;

	private static boolean debugEnabled;

	static {
		createLoggersFromProperties();
	}

	private static void debugMsg(String method, String message) {
		if (debugLogUtil) {
			System.out.println(method + ": " + message);
		}
	}

	public static void setLevel(Logger logger, Level loglevel) {
		Handler[] h = logger.getHandlers();
		for (int i = 0; i < h.length; i++) {
			System.out.println("setLevel " + loglevel.toString());
			h[i].setLevel(loglevel);
		}
		logger.setLevel(loglevel);
	}

	public static Logger getLogger(String name) {
		debugMsg("getLogger", name);
		LogManager manager = LogManager.getLogManager();
		// check if logger is already registered
		Logger logger = manager.getLogger(name);
		if (logger == null) {
			logger = Logger.getLogger(name);
			setLevel(logger, Level.OFF);
			manager.addLogger(logger);
			debugMsg("getLogger", "creating new logger");
		}
		if (logger.getLevel() == null) {
			debugMsg("getLogger", "level == null -> setLevel to OFF ");
			setLevel(logger, Level.OFF);
		}
		debugMsg("getLogger", "logLevel " + logger.getLevel().getName());
		return logger;
	}

	private static void initLevel(Logger logger, Level loglevel) {
		Handler[] h = logger.getHandlers();
		for (int i = 0; i < h.length; i++) {
			logger.removeHandler(h[i]);
		}
		Handler console = new ConsoleHandler();
		console.setLevel(loglevel);
		logger.addHandler(console);
		logger.setLevel(loglevel);
		logger.setUseParentHandlers(false);
	}

	private static void createLoggersFromProperties() {
		try {
			debugMsg(LogUtil.class.getName(), "createLoggersFromProperties");
			InputStream is = LogUtil.class.getClassLoader()
					.getResourceAsStream(PROPERTIES_FILE);
			if (is == null) {
				System.err.println(LOGGER_WARNING);
			} else {
				Properties prop = new Properties();
				prop.load(is);
				debugMsg("createLoggersFromProperties",
						"properties file loaded: " + PROPERTIES_FILE);
				debugMsg("createLoggersFromProperties", "file content:\n"
						+ prop.toString());
				// get global debug enable flag
				debugEnabled = Boolean.parseBoolean(prop.getProperty(PLUGIN_ID
						+ "/debug"));
				debugMsg("createLoggersFromProperties", "debuging enabled: "
						+ debugEnabled);
				// get and configure loggers
				boolean moreLoggers = true;
				int loggerCount = 0;
				while (moreLoggers) {
					String loggerProp = prop.getProperty(PLUGIN_ID
							+ "/debug/logger" + loggerCount);
					loggerCount++;
					if (loggerProp != null) {
						// parse string and get logger name and log level
						int slashIndex = loggerProp.indexOf('/');
						String loggerName = loggerProp.substring(0, slashIndex)
								.trim();
						String logLevel = loggerProp.substring(slashIndex + 1,
								loggerProp.length());
						// register logger
						Level level;
						if (debugEnabled) {
							level = Level.parse(logLevel);
						} else {
							level = Level.OFF;
						}
						Logger logger = getLogger(loggerName);
						initLevel(logger, level);
						debugMsg("createLoggersFromProperties",
								"create logger " + loggerName + " with level "
										+ level.toString());
					} else {
						moreLoggers = false;
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}