`
samjavaeye
  • 浏览: 187323 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDK自带的日志包简单应用

    博客分类:
  • Java
阅读更多

【适用场景】

JDK自带的日志包,感觉功能没有Log4j强,也没log4j好用,可能是先入为主吧。但在个人开发测试的时候,毕竟是JDK自带的东西,不需要引入jar包,也不需要写配置文件,因此做一些简单、临时的日志输出,还是挺管用的。

 

稍微研究了一下,简单封装了几个类,日后自己用的时候,直接Copy就好了,免得重复研究浪费精力。

 

格式化类MySimpleFormatter:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public class MySimpleFormatter extends Formatter {
	private static final String NEW_LINE = (String) java.security.AccessController
			.doPrivileged(new sun.security.action.GetPropertyAction(
					"line.separator"));
	private static int STACK_TRACE_ELEMENT_INDEX = 7;
	private static final String SEPERATE_LINE = "----------------------------------";
	private static final SimpleDateFormat sf = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");

	@Override
	public String format(LogRecord record) {
		StringBuffer sb = new StringBuffer();
		buildClassAndMethodInfo(record, sb);
		String separateLine = buildSeparateLine(new Date(record.getMillis()));
		sb.append(separateLine);
		sb.append(record.getMessage()).append(NEW_LINE);
		sb.append(separateLine);
		return sb.toString();
	}

	private static StackTraceElement getStackTraceElement(LogRecord record) {
		StackTraceElement[] stackTraceElements = new Throwable()
				.getStackTrace();
		String name = record.getSourceClassName();
		if (name == null)
			name = record.getLoggerName();
		for (StackTraceElement stackTraceElement : stackTraceElements) {
			if (name.equals(stackTraceElement.getClassName()))
				return stackTraceElement;
		}
		StackTraceElement stackTraceElement = stackTraceElements[STACK_TRACE_ELEMENT_INDEX];
		return stackTraceElement;
	}

	private static void buildClassAndMethodInfo(LogRecord record,
			StringBuffer sb) {
		StackTraceElement stackTraceElement = getStackTraceElement(record);
		sb.append(NEW_LINE).append(stackTraceElement.getClassName());
		sb.append('.');
		sb.append(stackTraceElement.getMethodName()).append("(");
		sb.append(stackTraceElement.getLineNumber()).append(")");
		sb.append(NEW_LINE);
	}

	private static String buildSeparateLine(Date currentTime) {
		StringBuffer sb = new StringBuffer();
		sb.append(SEPERATE_LINE).append(" <").append(sf.format(currentTime))
				.append("> ").append(SEPERATE_LINE).append(NEW_LINE);
		return sb.toString();
	}

}

 

 

自己的控制台Handler类:

import java.util.logging.ConsoleHandler;
import java.util.logging.Level;

public class MyConsoleHandler extends ConsoleHandler {
	public MyConsoleHandler() {
		setLevel(Level.FINEST);
		setFormatter(new MySimpleFormatter());
		setOutputStream(System.out);
	}
}

 

 

客户端示例:

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class LogClient {
	public static void main(String[] args) {
		Logger logger = Logger.getLogger(LogClient.class.toString());
		// 设置整个Logger的日志级别
		logger.setLevel(Level.FINER);
		// MyConsoleHandler的日志级别默认为Level.FINEST,输出到System.out
		Handler myConsoleHandler = new MyConsoleHandler();
		logger.addHandler(myConsoleHandler);

		doLog(logger);
		
		logger.removeHandler(myConsoleHandler);
		try {
			// 指定日志文件名,写入模式为append
			Handler fileHandler = new FileHandler("D:\\temp\\test.log", true);
			// 设置自己的Formatter,否则缺省为XMLFormatter
			fileHandler.setFormatter(new MySimpleFormatter());
			logger.addHandler(fileHandler);
			doLog(logger);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void doLog(Logger logger) {
		logger.severe("severe");
		logger.warning("warning");
		logger.info("info");
		logger.config("config");
		logger.fine("fine");
		logger.finer("finer");
		logger.finest("finest");
	}

}

 

分享到:
评论

相关推荐

    Tomcat自带的日志实现是tomcat-juli.jar

    Tomcat自带的日志实现是tomcat-juli.jar,它是对默认的JDK日志java.util.logging进行一定的封装,和标准JDK日志支持相同的配置,但是和log4j等常用的日志框架比起来功能要较为简陋。但是tomcat-juli可以针对不同的...

    java开发常用jar包

    Junit包,当你运行Hibernate自带的测试代码的时候需要,否则就不用。 commons-digester.jar Apache Commons包中的一个,通过它可以很方便的解析xml文件生成java对象 aspectjrt.jar 和aspectjweaver.jar Annotation...

    java 实现AOP

     为了简单起见,例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的动态代理功能来实现AOP.  让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现...

    fourinone-3.04.25

    开发包里自带了一系列傻瓜上手demo,包括分布式计算、统一配置管理、集群管理、分布式锁、分布式缓存、MQ等方面, 每个demo均控制在少许行代码内,但是涵盖了Fourinone主要的功能,方便大家快速理解并掌握。...

    Guns-Separation v1.1

    11、支持jenkins一键部署,另自带docker maven插件,支持docker部署。 12、文件,短信,缓存,邮件等,利用接口封装,方便拓展。 13、文件默认使用本地文件,短信默认使用阿里云sms,缓存默认使用内存缓存。 14、...

    Guns-Separation-其他

    Guns-Separation快速开始准备以下环境:1、npm,jdk1.8,maven 3.6或以上版本。2、需要准备一个mysql 5.7数据库。3、您的IDE需要安装lombok插件。前端运行:1、cd _web/2、npm install3、npm run serve后端运行:1、...

    sap服务器安装.doc

    软件状况及版本 宿主机及两台虚拟机的操作系统均使用windows 2003企业版,升级至sp2以上 虚拟机软件此次使用 VMware Server 1、0、6 Oracle与SAP:此次使用SAP Ecc 5、0以及SAP自带的oracle,补丁,OFS Jdk:版本必须为 ...

    低清版 大型门户网站是这样炼成的.pdf

    2.5.4 struts 2的自带校验器 92 2.6 struts 2的拦截器 94 2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 ...

    Nginx+Tomcat负载均衡

    1. 使用tomcat自带的cluster方式,多个tomcat见自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。 2. 利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一...

    t淘淘商城项目 商城项目 视频和源码教程 详细

     近年来,中国的电子商务快速发展,交易额连创新高,电子商务在各领域的应用不断拓展和深化、相关服务业蓬勃发展、支撑体系不断健全完善、创新的动力和能力 不断增强。电子商务正在与实体经济深度融合,进入规模性...

    梦想新闻发布系统-正式版

    开发平台:Win2003 + Apache2.0.52 + Tomcat5.54 + Mod_jk 1.2.6 + JDK1.5 程序正常运行需要JVM(Java虚拟机)1.5以上的版本。 安装说明: 一、首先请自行建好JSP服务器。单独运行或者与Apache集成都行(我用的是...

Global site tag (gtag.js) - Google Analytics