一 简述
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次。
相关推荐
允许在 Web 应用程序部署期间启用 JDK 记录器桥接的小助手库。 请确保您了解 slf4j中描述的连接 JDK 记录器的含义。 Maven 依赖 < groupId>de.skuzzle.slf4j < artifactId>webapp-jul-to-slf4j < version>...
详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!
* JdkLoggerUtils是基于JDK Logger对日志进行输出存储的工具类, * 封装了日志输出的的各种方法,本类模仿了log4j的输出格式,定义 * 了1、日志输出到控制台,2、日志输出到文件,3、日志发送邮件, * 4、日志...
用于log4j和jdk的颜色控制台日志记录 用法 从下载最新的颜色记录器jar或自行构建 下载可选,请参见下文( jansi-1.18是此时的最新版本,但我没什么花哨的东西,所以我不希望其他版本感到惊讶) 确保上面提到的jar...
java swing用Logger输出错误日志
14:log4j-1.2.16.jar 支持 log4j 日志,当此文件不存在时,自动切换至 JDK Logger, 注意,log4j需要相应的配置文件 log4j.properties,否则当log4j-1.2.16.jar 存在 而log4j.properties 不存在时无日志输出。jdk...
Java Excel API—用于读取、写入和修改Excel电子表格的Java API JExcelApi Java Excel API是一个成熟的开放源码Java API,允许开发...支持使用Jakarta Commons logging、log4j、JDK 1.4 Logger等进行日志记录 更多...
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));
private Logger logger = Logger.getLogger(this.getClass().getName()); public void processBusiness(){ try { logger.info("start to processing..."); //business logic here. System.out....
logger – 用来记录日志的对象 log level – 日志等级:从FINEST到SEVERE级别 请参考JDK文档(Level) handler – 日志输出处理器,即用来将格式化后的日志信息输出,J2SE提供了下面的处理器 ...
Java Log4j 1,2 所需Jar...用于日志记录的技术很多,如 jdk 的 logger 技术,apache 的 log4j、log4j2 技术等。 Log4j 的全称为 Log for java,即,专门用于 java 语言的日志记录工具。其目前有两个版 本:Log4j 与 Log4j2。
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 完整依赖包,在jdk1.8.201中测试通过。使用教程https://www.tutorialspoint.com/springmvc/springmvc_log4j.htm
在 sun 开发 logger 前,apache 项目已经开发了功能强大的 log4j 日志工具,并向 sun 推荐将其纳入到 jdk 的一部分,可是 sun 拒绝了 apache 的提议,sun 后来自己开发了一套记录日志的工具。可是现在的开源项目都...
使用 JDK 记录器并在第二个 Jenkins 的同一个实例转移端口上运行: java -Djgroups.use.jdk_logger=true -jar jenkins.war java -Djgroups.use.jdk_logger=true -jar jenkins.war --httpPort=9090
这个jar很小,也很方便使用,需要使用jdk1.6+ 版本。 使用方法如下: 引入class: import com.light.black.util.logger.ILogger; import com.light.black.util.logger.MyLogger; 创建loger: private static ...
找到 if (Natives.definitelyRunningAsRoot()) 代码,将throw new RuntimeException替换为logger.warn,将异常改为警告日志即可。 进入文件夹elasticsearch-6.2.4,执行命令gradlew assemble,编译完成后,进入目录...
我们在写日志的时候首先要获取logger,在每一个使用log4j的项目都有很多个地方要获取logger,这些logger是真实的被实例化的Logger对象,他们有可能被分散在无数不同的类中,日志体系结构讲的是这些logger对象是如何...
一.logback简介 1.logback: Logback是由log4j创始人设计的另一个开源日志组件。(好的日志记录方式可以提供我们足够多的定位错误的依据)。 2.主要有三个模块组成: logback-core:其它两个模块的基础模块。 ...