62,614
社区成员
发帖
与我相关
我的任务
分享
package com.wang.test;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
/**
* 日志输出到登陆系统用户所在的根目录的邮政储蓄日志的文件夹下,
* 并且根据系统日期命名日志文件
* @author wang
*
*/
public class LoggerUtil {
/** 日志文件存储容量 **/
//private static int file_size = 5*1024*1024;
/** 存放的文件夹 **/
private static String file_name = "邮政储蓄日志";
//private static ;
/**
* 记录一条不带参数的消息。
* @param level 某个消息级别标识符,例如 SEVERE。
* @param msg 字符串消息(或消息类别中的键)。
* @param className 记录日志的类
*/
public static void log(Level level,String msg,Object className) {
Logger logger = Logger.getLogger(className.getClass().getName());
try {
setLogingProperties(logger);
logger.log(level, msg);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 记录带有一个对象参数的消息。
* @param level 某个消息级别标识符,例如 SEVERE。
* @param msg 字符串消息(或消息类别中的键)。
* @param className 记录日志的类
* @param obj 消息的参数。
*/
public static void log(Level level,String msg,Object className,Object obj) {
try {
Logger logger = Logger.getLogger(className.getClass().getName());
setLogingProperties(logger);
logger.log(level, msg, obj);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 设置Logger配置
* @param logger
* @throws SecurityException
* @throws IOException
*/
private static void setLogingProperties(Logger logger) throws SecurityException, IOException {
FileHandler fh = new FileHandler(getLogName(),true);
Handler ch = new ConsoleHandler();
logger.addHandler(fh);
logger.setLevel(Level.ALL);
SimpleFormatter sf = new SimpleFormatter();
fh.setFormatter(sf);
logger.addHandler(ch);
ch.close();
}
/**
* 得到要记录的日志的路径及文件名称
* @return
*/
private static String getLogName() {
StringBuffer logPath = new StringBuffer();
logPath.append(System.getProperty("user.home"));
logPath.append("\\"+file_name);
File file = new File(logPath.toString());
if (!file.exists())
file.mkdir();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
logPath.append("\\"+sdf.format(new Date())+".log");
return logPath.toString();
}
public static void main(String [] args) throws InterruptedException {
LoggerUtil.log(Level.INFO, "llllllllllllll", new Object() );
LoggerUtil.log(Level.INFO, "ddd", new Object());
LoggerUtil.log(Level.INFO, "fffffff",new Object());
LoggerUtil.log(Level.INFO, "c", new Object());
}
}
# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
/**
* 设置Logger配置
* @param logger
* @throws SecurityException
* @throws IOException
*/
private static void setLogingProperties(Logger logger) throws SecurityException, IOException {
FileHandler fh = new FileHandler(getLogName(),true);
/*默认的logger就是打印到控制台上.你没加一次就会多打印一行.所以这里注销掉加入控制台的代码.*/
//Handler ch = new ConsoleHandler();
/*这里也是只需要加入一次写入文件的Handler*/
if(logger.getHandlers().length==0)
logger.addHandler(fh);
logger.setLevel(Level.ALL);
SimpleFormatter sf = new SimpleFormatter();
fh.setFormatter(sf);
// logger.addHandler(ch);
//ch.close();
}