`
samjavaeye
  • 浏览: 193293 次
  • 性别: 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");
	}

}

 

分享到:
评论

相关推荐

    简单建立数据连接池及JDK自带日志使用

    本篇文章将详细介绍如何简单地建立数据连接池以及如何使用JDK自带的日志功能。 首先,我们来了解数据连接池的基本原理。数据连接池,如Apache的Commons DBCP、C3P0或HikariCP,它们预先创建一定数量的数据库连接,...

    简单建立数据库连接池及JDK自带日志使用(真正)

    本示例将重点讨论如何使用JDBC API和JDK自带的日志系统进行简单的数据库连接池配置。 首先,数据库连接池的基本工作原理是预先创建一定数量的数据库连接,并存储在一个池中。当应用需要连接数据库时,它会从池中...

    jdk1.4 json包 6个全

    标题提到的"jdk1.4 json包 6个全"指的是为Java 1.4版本提供的一个完整的JSON处理库,包含了六个相关的jar文件。 1. **commons-collections.jar**:这是Apache Commons Collections库,提供了大量的集合框架扩展,...

    shiro需要的Jar含日志包

    - 在应用中,需要添加 SLF4J 的桥接库,如 slf4j-log4j12.jar(如果使用 Log4j)或者 slf4j-jdk14.jar(如果使用 JUL),以便 SLF4J 调用实际的日志框架。 4. **压缩包中的文件**: - 压缩包 "shiro" 可能包含了 ...

    websphere MQ 8.0 自带jar包

    WebSphere MQ 8.0 自带的 JAR 包是一组关键组件,它们构成了 IBM 的消息中间件解决方案,用于在不同应用程序之间可靠地传递数据。这些 JAR 文件位于 `WebSphere MQ\java\lib` 目录下,是开发、配置和运行与 ...

    jdk1.6_green_32bit

    9. **JConsole**:JDK自带的性能监控工具JConsole在1.6中得到增强,可以提供更详细的内存、CPU和线程监控,帮助开发者诊断性能问题。 10. **JAR文件签名和验证**:1.6版本改进了对JAR文件的签名和验证机制,增强了...

    jdk1.6与jboss5.x冲突问题的解决方法

    将这些库放入`endorsed`目录是因为它们会优先于JDK自带的类加载,从而可能解决了由于版本不匹配或API实现不完全而导致的问题。 在某个老外网站上,7楼的建议被采纳,这表明社区支持和经验分享在解决这类问题中起到...

    java jdk 最完整的中文文档

    3. **开发者工具指南**:这部分涵盖JDK自带的各种开发工具,如javac编译器、javadoc生成文档工具、junit测试框架等。了解这些工具的使用能极大地提高开发效率。 4. **性能和调优指南**:对于大型应用或性能敏感的...

    怎么配置JDK和JBOSS

    在进行Java应用程序开发时,经常需要用到JDK(Java Development Kit)和JBoss这样的应用服务器。本文将详细介绍如何下载并配置JDK和JBoss,帮助开发者顺利搭建开发环境。 #### 一、JDK的安装配置 1. **下载JDK** ...

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

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

    log日志组件总结

    这是Java标准库中自带的日志系统,简单易用。它的主要优点在于无需额外引入依赖,缺点是功能相对有限,不支持复杂的配置和日志级别控制。例如,`java.util.logging.Logger`类提供了基础的日志记录功能,但其灵活性和...

    jdk1.8.40-linux

    - **性能监控工具**:使用JDK自带的工具(如VisualVM、JConsole等)来监控Java应用的运行状态。 ### 安全性与更新 - **定期更新**:及时更新JDK到最新版本可以确保获得最新的安全补丁和性能改进。 - **安全配置**...

    java 日志体系概述与应用.docx

    SLF4J提供了一个统一的日志接口,允许开发者在部署时通过类路径中的特定jar包指定日志实现,如slfj-log4j12.jar、slf4j-jdk14.jar等。这使得在不修改代码的情况下,可以轻松切换日志实现,避免了JCL的动态绑定问题。...

    JDK Development Kit 17.0.7 downloads - Linux - x64 ROM Package

    1. **监控**:使用JDK自带的JMX(Java Management Extensions)或第三方工具(如VisualVM)监控Java应用的性能。 2. **日志分析**:通过2023-06-11.txt这样的日志文件,可以追踪应用程序的运行情况,及时发现并解决...

    测试工程(netbeans8.1,NetBeans自带glassfish4.1,JDK7)

    标题中的“测试工程(netbeans8.1,NetBeans自带glassfish4.1,JDK7)”指的是一项基于NetBeans 8.1集成开发环境、使用GlassFish 4.1应用服务器,并且依赖于Java Development Kit 7(JDK7)的软件测试项目。...

    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    在Java中,我们可以使用JDK自带的动态代理或者第三方库如CGLIB、Javassist、ASM来实现。 **JDK动态代理**: JDK的动态代理主要依赖于`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`两个类。...

    JAVA项目之日志(log)设置.pdf

    JDK自带的logging机制则更加轻量级,可以无缝地集成到Java应用中。 然而,Apache与Sun之间关于日志工具的竞争促使***e推出了Commons Logging组件日志门面库,它是Java日志门面库,提供了一系列用于各种日志系统的...

    Linux下JDK+Tomcat服务的配置

    由于CentOS 5.3自带的JDK版本较低(1.4.2),不满足现代Web应用的需求,因此需要替换为更高版本的JDK(1.6及以上)。同时,为了部署项目,还需要安装和配置Tomcat服务器。 #### 二、读者对象 本指南主要面向Linux...

Global site tag (gtag.js) - Google Analytics