Java日志体系学习1--JUL

        最近在工作中遇到了一个有关于日志引起的性能问题,平日里只是简单实用@slj4j @log4j2 等注解来记录日志,但是对于日志记录没有全面学习总结一下,因此系统的学习一下java日志。

1.java日志框架

现有的java日志框架

JUL(java util logging)、logback、log4j、log4j2

JCL(Jakarta Commons Logging)、slf4j( Simple Logging Facade for Java)

日志门面 JCL、slf4j

日志实现 JUL、logback、log4j、log4j2

日志门面简单来说就是接口,具体的日志实现有JUL、logback、log4j、log4j2 目前主流使用的是log4j2。

日志框架出现的历史顺序: log4j -->JUL-->JCL--> slf4j --> logback --> log4j2

2.JUL

JUL全称Java util Logging是java原生的日志框架.

 其大致原理如下:

Loggers:被称为记录器,应用程序通过获取Logger对象,调用其API来来发布日志信息。Logger 通常时应用程序访问日志系统的入口程序。 Appenders:也被称为Handlers,每个Logger都会关联一组Handlers,Logger会将日志交给关联 Handlers处理,由Handlers负责将日志做记录。Handlers在此是一个抽象,其具体的实现决定了 日志记录的位置可以是控制台、文件、网络上的其他日志服务或操作系统日志等。

Layouts:也被称为Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts决定了 数据在一条日志记录中的最终形式。

Level:每条日志消息都有一个关联的日志级别。该级别粗略指导了日志消息的重要性和紧迫,我 可以将Level和Loggers,Appenders做关联以便于我们过滤消息。

Filters:过滤器,根据需要定制哪些信息会被记录,哪些信息会被放过。

基本使用如下所示:

日志级别可以参考Level类

日志的配置文件

默认配置文件路径$JAVAHOME\jre\lib\logging.properties

看一下JDK中的配置文件

############################################################
#  	Default Logging Configuration File
#
# You can use a different file by specifying a filename
# with the java.util.logging.config.file system property.  
# For example java -Djava.util.logging.config.file=myfile
############################################################

############################################################
#  	Global properties
############################################################

# "handlers" specifies a comma separated list of log Handler 
# classes.  These handlers will be installed during VM startup.
# Note that these classes must be on the system classpath.
# By default we only configure a ConsoleHandler, which will only
# show messages at the INFO and above levels.
handlers= java.util.logging.ConsoleHandler

# To also add the FileHandler, use the following line instead.
#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler

# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers.  For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= INFO

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# Example to customize the SimpleFormatter output format 
# to print one-line log message like this:
#     <level>: <log message> [<date/time>]
#
# java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n

############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
com.xyz.foo.level = SEVERE

 JUL原理:

1. 初始化LogManager 1. LogManager加载logging.properties配置 2. 添加Logger到LogManager

2. 从单例LogManager获取Logger

3. 设置级别Level,并指定日志记录LogRecord

4. Filter提供了日志级别之外更细粒度的控制

5. Handler是用来处理日志输出位置

6. Formatter是用来格式化LogRecord的

JDK中自带的formatter和filter如下 具体原理可以参考源码

log4j现在已经基本不怎么使用了,直接跳过。

参考资料:

黑马程序员java日志框架教程,全面深入学习多种java日志框架_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值