`

JDK Logger 简介

    博客分类:
  • jdk
阅读更多

一 简述

java.util.logging是JDK自带的日志记录包。

默认情况下,JDK的LogManager会在JRE目录下的"lib/logging.properties"这个文件中读取配置。

JDK的日志包涉及handler,formatter,level

名词 描述
handler

将日志信息记录到指定的流之中,可能是控制台或者是一个文件或者是任意存储区域。

常用实现类 ConsoleHandlerFileHandlerSocketHandler

formatter 日志信息格式化类。常用实现类 SimpleFormatterXMLFormatter
level

日志记录级别。

SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值)

ALL(记录所有信息)  OFF(不记录任何级别信息)

 

二 简单Demo

MySimpleFormatter.java

package logging.formatter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;
public class MySimpleFormatter extends SimpleFormatter{
	private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	private StringBuilder sb = new StringBuilder();

	@Override
	public synchronized String format(LogRecord record)
	{
		Level level=record.getLevel();
		String time=sdf.format(new Date(record.getMillis()));
		String loggerName=record.getLoggerName();
		String message=record.getMessage();
		
		this.sb.append("[").append(level).append("]");
		this.sb.append(" ").append(time);
		this.sb.append(" ").append(loggerName);
		this.sb.append(" :").append(message);
		this.sb.append("\n");
		return sb.toString();
	}
}

 

DefaultStreamHandler.java

package logging.handler;
import java.io.OutputStream;
import java.util.logging.StreamHandler;
public class DefaultStreamHandler extends StreamHandler {
	@Override
	public synchronized void setOutputStream(OutputStream out)
			throws SecurityException {
		super.setOutputStream(out);
	}
}

 

CustomLogManager.java

package logging.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import logging.formatter.MySimpleFormatter;
import logging.handler.DefaultStreamHandler;
public class CustomLogManager{
	static{
        LogManager.getLogManager().reset(); // reset the log manager
	}
	
	// read the log configuration from outside property file
	public static void resetFromPropertyFile(String filePath){
		LogManager logManager = LogManager.getLogManager();  
        InputStream inputStream = CustomLogManagerEditor.class.getClassLoader().getResourceAsStream(filePath);  
        try {
        	logManager.readConfiguration(inputStream);
		} catch (Exception e) {
			throw new RuntimeException("reload log configuration fail: "+e.toString());
		}       
	}


	public static Logger getLogger(String name){
		Logger logger=Logger.getLogger(name);
		logger.setLevel(Level.ALL);
		
		// add console handler
		ConsoleHandler consoleHandler=new ConsoleHandler();
		consoleHandler.setLevel(Level.FINE);
		consoleHandler.setFormatter(new MySimpleFormatter());
		logger.addHandler(consoleHandler);
		
		// add file handler
		FileHandler fileHandler=null;
		try {
			fileHandler = new FileHandler("log.log",true);
			fileHandler.setLevel(Level.FINE);
			fileHandler.setFormatter(new MySimpleFormatter());
			logger.addHandler(fileHandler);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// add default stream handler
		DefaultStreamHandler defaultStreamHandler = new DefaultStreamHandler();
		defaultStreamHandler.setLevel(Level.ALL);
		defaultStreamHandler.setFormatter(new MySimpleFormatter());
		defaultStreamHandler.setOutputStream(System.out);
		logger.addHandler(defaultStreamHandler);
		
		return logger;
	}
}

 

logging.properties

#Level的五个等级SEVERE(最高值) 、WARNING 、INFO 、CONFIG 、FINE 、FINER 、FINEST(最低值)  。这个不同于log4j  
#指定默认logger级别
.level= ALL  
#为 Handler 指定默认的级别(默认为 Level.INFO)。   
java.util.logging.ConsoleHandler.level=FINE
# 指定要使用的 Formatter 类的名称(默认为 java.util.logging.SimpleFormatter)。   
java.util.logging.ConsoleHandler.formatter=logging.formatter.MySimpleFormatter
  
# 为 Handler 指定默认的级别(默认为 Level.ALL)。   
java.util.logging.FileHandler.level=ALL
# 指定要使用的 Formatter 类的名称(默认为 java.util.logging.XMLFormatter)。   
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
# 指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为 0,则没有限制(默认为无限制)。   
java.util.logging.FileHandler.limit=1024000
# 指定有多少输出文件参与循环(默认为 1)。   
java.util.logging.FileHandler.count=1
# 为生成的输出文件名称指定一个模式。有关细节请参见以下内容(默认为 "%h/java%u.log")。   
java.util.logging.FileHandler.pattern=u.log  
# 指定是否应该将 FileHandler 追加到任何现有文件上(默认为 false)。   
java.util.logging.FileHandler.append=true

handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler

 

测试类

Main.java

 

package logging;
import java.io.IOException;
import java.util.logging.Logger;
import logging.util.CustomLogManager;
public class Main {
	public static void main(String[] args) throws SecurityException, IOException {
//		CustomLogManager.resetFromPropertyFile("logging/logging.properties");
//		Logger logger=Logger.getLogger(Main.class.getName());
		
		Logger logger=CustomLogManager.getLogger(Main.class.getName());
		
		logger.fine("warning test!");
	}
}

 

 Note:

CustomLogManagerEditor.getLogger返回的logger拥有三个handler,所以记录日志信息的时候,日志信息会被存储到三个区域【log.log,System.out,System.err】。

当启用CustomLogManagerEditor.resetFromPropertyFile("logging/logging.properties");时,日志信息会被记录到控制台,以及u.log文件。

如果即调用CustomLogManagerEditor.resetFromPropertyFile("logging/logging.properties");又通过CustomLogManagerEditor.getLogger返回的logger记录日志,因为logger有5个handler,所以日志信息会被记录到4个区域【u.log,log.log,System.out,System.err】 其中在System.err中会记录2次。

 

 

 

 

分享到:
评论
5 楼 lijiejava 2013-08-19  
antlove 写道
lijiejava 写道
我同事被查出胃癌,唉,大家要注意身体啊 
我了个去

4 楼 antlove 2013-08-19  
lijiejava 写道
我同事被查出胃癌,唉,大家要注意身体啊 
我了个去
3 楼 lijiejava 2013-08-17  
我同事被查出胃癌,唉,大家要注意身体啊 
2 楼 antlove 2013-08-16  
lijiejava 写道
好!!!
鼓掌!!!
狂喊!!!
使劲!!!

1 楼 lijiejava 2013-08-15  
好!!!
鼓掌!!!
狂喊!!!
使劲!!!

相关推荐

    webapp-jul-to-slf4j:用于 Web 应用程序的 JDK Logger 桥接

    允许在 Web 应用程序部署期间启用 JDK 记录器桥接的小助手库。 请确保您了解 slf4j中描述的连接 JDK 记录器的含义。 Maven 依赖 < groupId>de.skuzzle.slf4j < artifactId>webapp-jul-to-slf4j < version>...

    java.util.logging.Logger使用详解

    详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!

    JdkLoggerUtils.java

    * JdkLoggerUtils是基于JDK Logger对日志进行输出存储的工具类, * 封装了日志输出的的各种方法,本类模仿了log4j的输出格式,定义 * 了1、日志输出到控制台,2、日志输出到文件,3、日志发送邮件, * 4、日志...

    java-color-loggers:用于log4j和jdk的颜色控制台日志记录

    用于log4j和jdk的颜色控制台日志记录 用法 从下载最新的颜色记录器jar或自行构建 下载可选,请参见下文( jansi-1.18是此时的最新版本,但我没什么花哨的东西,所以我不希望其他版本感到惊讶) 确保上面提到的jar...

    java swing用Logger输出错误日志.docx

    java swing用Logger输出错误日志

    JFinal所需的Jar

    14:log4j-1.2.16.jar 支持 log4j 日志,当此文件不存在时,自动切换至 JDK Logger, 注意,log4j需要相应的配置文件 log4j.properties,否则当log4j-1.2.16.jar 存在 而log4j.properties 不存在时无日志输出。jdk...

    jexcelapi_2_6_12.zip

    Java Excel API—用于读取、写入和修改Excel电子表格的Java API JExcelApi Java Excel API是一个成熟的开放源码Java API,允许开发...支持使用Jakarta Commons logging、log4j、JDK 1.4 Logger等进行日志记录 更多...

    dcm4che 把dcm 解析为jpg 文件

    1.默认是32的jdk ...import org.slf4j.Logger; import org.slf4j.LoggerFactory; 3. dcm2Jpg.setFrame(1); dcm2Jpg.initImageWriter("JPEG",null,null,null,1l); dcm2Jpg.convert(dcmFile,new File(imgpath));

    java 实现AOP

     private Logger logger = Logger.getLogger(this.getClass().getName());  public void processBusiness(){  try {  logger.info("start to processing...");  //business logic here.  System.out....

    J2EE--Log日志

     logger – 用来记录日志的对象  log level – 日志等级:从FINEST到SEVERE级别  请参考JDK文档(Level)  handler – 日志输出处理器,即用来将格式化后的日志信息输出,J2SE提供了下面的处理器  ...

    Java Log4j所需Jar包

    Java Log4j 1,2 所需Jar...用于日志记录的技术很多,如 jdk 的 logger 技术,apache 的 log4j、log4j2 技术等。 Log4j 的全称为 Log for java,即,专门用于 java 语言的日志记录工具。其目前有两个版 本:Log4j 与 Log4j2。

    短信猫西门子TC35测试

    1、如果报了如下错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger 那是因为没有把log4j-1.2.13.jar倒入到工程中。 2、如果报了如下错误: org.smslib.GatewayException:...

    Apache Log4j_1.2.17 完整依赖包

    Apache Log4j_1.2.17 完整依赖包,在jdk1.8.201中测试通过。使用教程https://www.tutorialspoint.com/springmvc/springmvc_log4j.htm

    commons-logging.jra包

    在 sun 开发 logger 前,apache 项目已经开发了功能强大的 log4j 日志工具,并向 sun 推荐将其纳入到 jdk 的一部分,可是 sun 拒绝了 apache 的提议,sun 后来自己开发了一套记录日志的工具。可是现在的开源项目都...

    m2m-jgroups-plugin

    使用 JDK 记录器并在第二个 Jenkins 的同一个实例转移端口上运行: java -Djgroups.use.jdk_logger=true -jar jenkins.war java -Djgroups.use.jdk_logger=true -jar jenkins.war --httpPort=9090

    LBLogger java日志记录信息

    这个jar很小,也很方便使用,需要使用jdk1.6+ 版本。 使用方法如下: 引入class: import com.light.black.util.logger.ILogger; import com.light.black.util.logger.MyLogger; 创建loger: private static ...

    elasticsearch6.2.4修改编译源码root用户启动

    找到 if (Natives.definitelyRunningAsRoot()) 代码,将throw new RuntimeException替换为logger.warn,将异常改为警告日志即可。 进入文件夹elasticsearch-6.2.4,执行命令gradlew assemble,编译完成后,进入目录...

    Log4j日志体系结构

    我们在写日志的时候首先要获取logger,在每一个使用log4j的项目都有很多个地方要获取logger,这些logger是真实的被实例化的Logger对象,他们有可能被分散在无数不同的类中,日志体系结构讲的是这些logger对象是如何...

    Logback所需的jar包

    一.logback简介 1.logback: Logback是由log4j创始人设计的另一个开源日志组件。(好的日志记录方式可以提供我们足够多的定位错误的依据)。 2.主要有三个模块组成: logback-core:其它两个模块的基础模块。 ...

Global site tag (gtag.js) - Google Analytics