JDK Logger 简介 (zhuan)
http://antlove.iteye.com/blog/1924832
*******************************************
一 简述
java.util.logging是JDK自带的日志记录包。
默认情况下,JDK的LogManager会在JRE目录下的"lib/logging.properties"这个文件中读取配置。
JDK的日志包涉及handler,formatter,level
| 名词 | 描述 |
| handler |
将日志信息记录到指定的流之中,可能是控制台或者是一个文件或者是任意存储区域。 常用实现类 ConsoleHandler, FileHandler, SocketHandler |
| formatter | 日志信息格式化类。常用实现类 SimpleFormatter, XMLFormatter |
| 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次。
JDK Logger 简介 (zhuan)的更多相关文章
- JDK的简介,卸载和安装过程
JDK的简介,卸载和安装过程 JDK JRE JVM JDK:Java Development Kit JRE:Java Runtime Environment JVM:Java Virtual Ma ...
- 3-30 flash(api),rescue_from(); logger简介
ActionDispatch::Flash < Objec pass temporary primitive-types (String, Array, Hash) between action ...
- Lucene:基于Java的全文检索引擎简介 (zhuan)
http://www.chedong.com/tech/lucene.html ********************************************** Lucene是一个基于Ja ...
- 2.java.util.logging.Logger使用详解
一.java.util.logging.Logger简介 java.util.logging.Logger不是什么新鲜东西了,1.4就有了,可是因为log4j的存在,这个logger一直沉默着, 其实 ...
- JDK自带的日志Logging
OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...
- logback中logger详解
前言 logback实践笔记 上一篇主要对root进行了实践总结,现在基于上一篇中的springboot代码环境对logback.xml中的logger来进行实践和自己遇到的坑. logger简介 ...
- Java日志 (zhuan)
http://www.cnblogs.com/bird-li/p/4696662.html ************************************************* 日志对于 ...
- 日志框架--(二)JDK Logging
前言 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用.相对于其他的日志框架,JDK自带的日志可谓是鸡肋,无论易 ...
- Logback相关知识汇总
例如:%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4格式修饰符,与转换符共同使用:可选的格式修饰符位于“%”和转换符之间.第一个可选修饰符是左对齐 标志 ...
随机推荐
- plsql 快捷键配置
plsql 快捷键配置 CreateTime--2018年4月23日17:41:45 Author:Marydon 功能快捷键 预设条目 中文解释 快捷键配置Edit/Undo 撤销 ctrl+z ...
- More Effective C++:通过引用捕获异常
当你写一个catch子句时,必须确定让异常通过何种方式传递到catch子句里.你可以有三个选择:与你给函数传递参数一样,通过指针(by pointer),通过传值(by value)或通过引用(by ...
- hdu 4412 Sky Soldiers(区间DP)
Sky Soldiers Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- 在win7/8下搭建简易的无线平台
资料:http://www.cnblogs.com/KeenLeung/p/3482073.html http://www.cnblogs.com/KeenLeung/p/3481998.html 其 ...
- 使用增强for循环遍历集合的时候操作集合的问题?
// 遍历一个list public static void printList(List<String> list){ for (String string : list) { list ...
- SVN访问版本库精细的权限控制
SVN精细权限控制本章将详细介绍前一章所涉及的两个配置文件, svnserve.conf 和 authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义.除此之外的其他配置.安装等内容,不是 ...
- HDUOJ----1301 Jungle Roads
Jungle Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 【java设计模式】之 代理(Proxy)模式
代理模式的核心作用就是通过代理,控制对对象的访问.这跟实际中是一样的,比如说明星都有经纪人,这就是一个代理,比如有人要找某明星拍戏,那么首先处理这事的是他的经纪人,虽然拍戏需要自己拍,但是拍戏前后的一 ...
- laravel-v5.1分页并带参数
控制器的代码中
- python学习笔记——多进程二 进程的退出
1 进程的退出函数的基础语法 1.1 进程的退出函数 进程的退出含有有os._exit([status])和sys.exit([status])两种,从数据包来看,该退出模块仅在linux或者unix ...