- import java.io.IOException;
- import java.io.InputStream;
- import java.util.logging.Logger;
- public class LogManager {
- // 初始化LogManager
- static {
- // 读取配置文件
- ClassLoader cl = LogManager.class.getClassLoader();
- InputStream inputStream = null;
- if (cl != null) {
- inputStream = cl.getResourceAsStream("log.properties");
- } else {
- inputStream = ClassLoader
- .getSystemResourceAsStream("log.properties");
- }
- java.util.logging.LogManager logManager = java.util.logging.LogManager
- .getLogManager();
- try {
- // 重新初始化日志属性并重新读取日志配置。
- logManager.readConfiguration(inputStream);
- } catch (SecurityException e) {
- System.err.println(e);
- } catch (IOException e) {
- System.err.println(e);
- }
- }
- /**
- * 获取日志对象
- * @param clazz
- * @return
- */
- public static Logger getLogger(Class clazz) {
- Logger logger = Logger
- .getLogger(clazz.getName());
- return logger;
- }
- }
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Logger;
public class LogManager {
// 初始化LogManager
static {
// 读取配置文件
ClassLoader cl = LogManager.class.getClassLoader();
InputStream inputStream = null;
if (cl != null) {
inputStream = cl.getResourceAsStream("log.properties");
} else {
inputStream = ClassLoader
.getSystemResourceAsStream("log.properties");
}
java.util.logging.LogManager logManager = java.util.logging.LogManager
.getLogManager();
try {
// 重新初始化日志属性并重新读取日志配置。
logManager.readConfiguration(inputStream);
} catch (SecurityException e) {
System.err.println(e);
} catch (IOException e) {
System.err.println(e);
}
}
/**
* 获取日志对象
* @param clazz
* @return
*/
public static Logger getLogger(Class clazz) {
Logger logger = Logger
.getLogger(clazz.getName());
return logger;
}
}
2.在需要记录日志的地方,通过LogManager.getLogger()方法得到Logger对象,然后调用其记录日志的方法记录日志。这里,我记录错误堆栈信息是用的 log(Level level, String msg, Throwable thrown) 。
贴出我的properties配置文件内容,其中handlers属性一定别忘了,我就因为缺少这个属性花费了很多时间找原因。
- #Level的五个等级SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值) 。这个不同于log4j
- #为 Handler 指定默认的级别(默认为 Level.INFO)。
- java.util.logging.ConsoleHandler.level=INFO
- # 指定要使用的 Formatter 类的名称(默认为 java.util.logging.SimpleFormatter)。
- java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
- # 为 Handler 指定默认的级别(默认为 Level.ALL)。
- java.util.logging.FileHandler.level=INFO
- # 指定要使用的 Formatter 类的名称(默认为 java.util.logging.XMLFormatter)。
- java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
- # 指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为 0,则没有限制(默认为无限制)。
- java.util.logging.FileHandler.limit=1024000
- # 指定有多少输出文件参与循环(默认为 1)。
- java.util.logging.FileHandler.count=1
- # 为生成的输出文件名称指定一个模式。有关细节请参见以下内容(默认为 "%h/java%u.log")。
- java.util.logging.FileHandler.pattern=C:/SSLog%u.log
- # 指定是否应该将 FileHandler 追加到任何现有文件上(默认为 false)。
- java.util.logging.FileHandler.append=true
- handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler
这样配置后还有一个缺陷,日志文件累积到指定的大小时,将会被重新创建,也就是之前的日志信息会丢失,但是不设置大小的话会导致单个文件过大。关于这个问题还没有花时间去细究,以下这篇博文应该能解决这一问题。