前段时间Log4j爆出严重漏洞,其实我一直都不太喜欢这个臃肿的框架。
下面代码对JDK内置的log简单地封装了一下。直接复制到项目即可用。更不需要maven。
使用方法看main函数。
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.ConsoleHandler;
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;
import java.util.logging.SimpleFormatter;
/**
* @author RoadToExpert (原创)
* @site https://blog.csdn.net/roadtotheexpert
* @date 2022-01-10
*/
public class Loger {
public Loger(String file) {
setLog(build(file));
}
private Logger log = null;
public void setLog(Logger log) {
this.log = log;
}
public Logger getLog() {
return log;
}
public void info(String msg) {
log.info(msg);
}
public void warn(String msg) {
log.warning(msg);
}
private static Loger _instance = null;
public static Loger instance(){
if( _instance == null) {
_instance = new Loger("log"+ymd()+".txt");
}
return _instance;
}
private static SimpleDateFormat ymd = new SimpleDateFormat("yyyy-MM-dd");
public static String ymd() {
return ymd.format(Calendar.getInstance().getTime());
}
public static Logger build(String file){
FileHandler fh = null;
if( file != null ) {
try {
fh = new FileHandler(file, true);
fh.setLevel(Level.ALL);
//fh.setFormatter(new SimpleFormatter());
fh.setFormatter(new Loger.LogFormatter());
} catch (Exception e) {
e.printStackTrace();
}
}
ConsoleHandler ch = new ConsoleHandler();
ch.setLevel(Level.ALL);
ch.setFormatter(new SimpleFormatter());
Logger logger = Logger.getLogger(file);
if( fh != null)
logger.addHandler(fh);
//logger.addHandler(ch);
logger.setLevel(Level.ALL);
return logger;
}
private static class LogFormatter extends Formatter {
private static final String format = "%1$tY/%1$tm/%1$td/%1$tH:%1$tM:%1$tS %2$s[%4$s]\t%5$s%6$s%n";
private final Date dat = new Date();
public synchronized String format(LogRecord record) {
dat.setTime(record.getMillis()); String source;
if (record.getSourceClassName() != null) {
source = record.getSourceClassName();
if (record.getSourceMethodName() != null) {
source += " " + record.getSourceMethodName();
}
} else {
source = record.getLoggerName();
}
String message = formatMessage(record);
String throwable = "";
if (record.getThrown() != null) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
pw.println();
record.getThrown().printStackTrace(pw);
pw.close();
throwable = sw.toString();
}
return String.format(format,
dat,
source,
record.getLoggerName(),
//record.getLevel().getLocalizedLevelName(),
record.getLevel().getName(),
message,
throwable);
}
}
public static void i(String msg) {
instance().info(msg);
}
public static void w(String msg) {
instance().warn(msg);
}
public static void main(String[] args) throws Exception {
Loger.i("一个Java文件就能完成log!");
Loger loger = new Loger("log2.txt");
loger.info("写到另一个文件" + System.currentTimeMillis());
}
}