Java内置Logger的项目级完整代码使用流程

此前因其它事务,已经有很长时间没作Java开发。近日要用Java构建一个Html5移动小程序后台。

因为是小程序嘛,用于移动端,处理客户端请求都是返回json,自然就用不上SSH那么高大尚,那么耗内存,那么复杂,那么开发效率慢 的框架。

同时,也想 回归本原,写一些简单代码来架建一个 restful 框架雏型。

本原想用log4j构建log系统,下载最新版,一看引包达 1M 多,恼了,不就是写条log,用得 着吗?!我整个项目把自己的代码打成jar包还没有一兆呢!

又看了下common-logging,它要不就是 没干啥事,要不就是 需要挂载其它包。

参考了网上的资料,决定自己封装一个JDK Log

下面代码已经调好了,不客气! (如果你也有类似的看法)

1,新建 SysLog.java ,键入下面的代码。用于 getLogger

2,新建 SysLogFormatter.java,用于格式化输入。我想你是不会满意jdk的默认log输出。这是我从SimpleFormatter摸索出来的。

3,新建 logger.properties,放到 src 或 WEB-INF 目录下。用于格式化输出,和输出到file


SysLog.java

import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

public class SysLog {
	private static SysLog log = null;

	public static SysLog instance() {
		if (log == null) {
			//synchronized SysLog.class
			log = new SysLog();
		}
		return log;
	}

	public SysLog() {
		InputStream is = null;
        try {
        	LogManager.getLogManager().readConfiguration(SysLog.class.getClass().getResourceAsStream("/logger.properties"));
            
        } catch (Exception e) {
            System.err.println("input properties file is error.\n" + e.toString());
            e.printStackTrace();
            
        } finally {
        	if( is != null ) {
        		try {
        			is.close();	
				} catch (Exception e2) {
					e2.printStackTrace();
				}        		
        	}
        }
	}

	public Logger get_loger(Class<?> clazz) {
		return get_loger(clazz.getName());
	}

	public Logger get_loger(String clazz) {
		// LogManager.getLogManager().getLogger(name)
		return Logger.getLogger(clazz);

	}

	public static Logger getLoger(Class<?> clazz) {
		return instance().get_loger(clazz);
	}

	public static Logger getLoger(String clazz) {
		
		return instance().get_loger(clazz);
	}

}



SysLogFormater.java


package sx.cms.util;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;

/**
 * this code was from copy from java.util.logging.SimpleFormatter
 */
public class SysLogFormatter extends Formatter {
    //private static final String format = "%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%6$s%n";
	//private static final String format = "%1$tY/%1$tb/%1$td/%1$Tp/%1$tl:%1$tM:%1$tS %2$s[%4$s]\t%5$s%6$s%n";
	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);
    }

}



logger.properties



handlers = java.util.logging.ConsoleHandler,java.util.logging.FileHandler
java.util.logging.ConsoleHandler.formatter = project.your.SysLogFormatter
java.util.logging.ConsoleHandler.level = CONFIG

# Level.INFO
 
#log out file
java.util.logging.FileHandler.pattern = my.log%g.log  
java.util.logging.FileHandler.formatter = sx.cms.util.SysLogFormatter
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 = WARNING



测试和使用


	//测试和使用
	public static void main(String[] args) {
		Logger log = SysLog.getLoger(Main.class);
		log.info("log 中国" + System.currentTimeMillis());
	}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值