默认情况下,JDK的LogManager会在JRE目录下的"lib/logging.properties"这个文件中读取配置。
在开发中往往需要自定义配置,因此可以通过两种方式来修改默认配置:
1、通过java命令行的方式修改
除此之外,LogManager还可以根据两个系统属性来允许用户控制日志的配置:
- "java.util.logging.config.class"
- "java.util.logging.config.file"
其中,class这个属性优先有效,如果设置,会忽略file这个属性。
Java中设置属性也有两种方法:
- Preferences API
- 启动的时候,命令行参数
关于Preferences API,请参考JDK Documentation。
命令行参数是指,启动的时候用 -D<name>=<value>的方式指定属性,具体到这里,我们就可以用
java -Djava.util.logging.config.file="abc.properties"
指定使用"abc.properties"这个文件作为配置文件
package com.proj.log;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;
import java.util.logging.Logger;
/**
* 日志{@link java.util.logging.Logger}获取器
*/
public class Logging {
private static Logger logger = null;
private Logging(){}
public static Logger getLogger(){
if (null == logger) {
InputStream is = Logging.class.getClass().getResourceAsStream("/logger.properties");
try {
LogManager.getLogManager().readConfiguration(is);
} catch (Exception e) {
logging.warning("input properties file is error.\n" + e.toString());
}finally{
try {
is.close();
} catch (IOException e) {
logging.warning("close FileInputStream a case.\n" + e.toString());
}
}
logger = Logger.getLogger("LOGGER");
}
return logger;
}
private static Logger logging = Logger.getLogger(Logging.class.getName());
}
默认在src目录下添加文件logger.properties:
handlers = java.util.logging.ConsoleHandler,java.util.logging.FileHandler
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.FileHandler.pattern = c:/my.log%g.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.limit = 104857600
java.util.logging.FileHandler.count = 3
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.level = INFO
LOGGER.level = FINEST
测试用例:
public class LoggerTest extends TestCase{
@Test
public void testLogger() throws Exception {
Logger logger = Logging.getLogger();
logger.finest("finest");
logger.finer("finer");
logger.fine("fine");
logger.info("info");
logger.config("config");
logger.warning("warning");
logger.severe("severe");
}
}
修改日期格式:
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class LogTest
{
public static void main(String[] args) throws IOException
{
Logger log = Logger.getLogger(LogTest.class.getName());
log.setLevel(Level.INFO);
FileHandler fileHandler = new FileHandler("E:/testlog%g.log", true);
fileHandler.setLevel(Level.SEVERE);
fileHandler.setFormatter(new Formatter()
{
public String format(LogRecord record)
{
SimpleDateFormat sd = new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");
String d = sd.format(new Date());
return d + record.getLevel() + ":" + record.getMessage() + "/n";
}
});
log.addHandler(fileHandler);
try
{
throw new Exception("ldddddddd");
}
catch (Exception e)
{
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
log.severe(sw.toString());
}
log.info("aaa");
}
}
格式:2014-10-29 17:39:11