Log4j日志的简单替代:JDK内置log的简单封装

1 篇文章 0 订阅
1 篇文章 0 订阅

前段时间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());
	}

	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值