Java——日志框架

Java日志框架+日志门面详解,史上最全! 1996年早期,欧洲安全电子市场项目组决定编写它自己的程序跟踪API(Tracing API)。经过不断的完善,这个API终于成为一个十分受欢迎的Java日志软件包,即Log4j。后来Log4j成为Apache基金会项目中的一员。期间Log4j近乎成了Java社区的日志标准。据说Apache基金会还曾经建议sun引入Log4j到java的标准库中,但Sun拒绝了。2002年Java1.4发布,Sun推出了自己的日志库JUL(Java Util Logging),其实现基本模仿了Log4j的实现。 阅读详情

目录

日志接口

日志实现

关系

Commons Logging实现机制

Slf4j实现机制

日志实现框架

Java 日志框架的选择

log4j配置文件

logback配置文件


日志接口

commons-loggin

slf4j

日志实现

log4j

logback

关系

  • Log4j 2与Log4j 1都是Apache旗下的日志框架,Log4j 2与Log4j 1发生了很大的变化,Log4j 2不兼容Log4j 1。

  • Commons Logging和Slf4j是日志门面(门面模式是软件工程中常用的一种软件设计模式,也被称为正面模式、外观模式。它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用)。Log4j和Logback则是具体的日志实现方案。可以简单的理解为接口与接口的实现,调用者只需要关注接口而无需关注具体的实现,做到解耦。

  • 比较常用的组合使用方式是Slf4j与Logback组合使用,Commons Logging与Log4j组合使用。

  • Logback必须配合Slf4j使用。由于Logback和Slf4j是同一个作者,其兼容性不言而喻。

Commons Logging实现机制

Commons Logging是通过动态查找机制,在程序运行时,使用自己的ClassLoader寻找和载入本地具体的实现。详细策略可以查看commons-logging-*.jar包中的org.apache.commons.logging.impl.LogFactoryImpl.java文件。由于Osgi不同的插件使用独立的ClassLoader,Osgi的这种机制保证了插件互相独立, 其机制限制了Commons Logging在Osgi中的正常使用。

Slf4j实现机制

Slf4j在编译期间,静态绑定本地的Log库,因此可以在Osgi中正常使用。它是通过查找类路径下org.slf4j.impl.StaticLoggerBinder,然后在StaticLoggerBinder中进行绑定。

日志实现框架

  • Jul:Java Util Logging,自Java1.4以来的官方日志实现。

  • Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。

  • Apache Log4j 2是apache开发的一款Log4j的升级产品,并且不兼容Log4j。

  • Logback是一个日志框架,Log4j是同一作者,都出自Ceki Gülcü之手。

Java 日志框架的选择

  • 成本考虑:Logback文档免费。Logback的所有文档是全面免费提供的,不象Log4J那样只提供部分免费文档而需要用户去购买付费文档。

  • 资源开销:Commons Logging相比较与SLF4J开销更高.

  • 性能:Logback相比Log4j、Log4j2拥有更好的性能。Logback声称:某些关键操作,比如判定是否记录一条日志语句的操作,其性能得到了显著的提高。这个操作在Logback中需要3纳秒,而在Log4J中则需要30纳秒。LogBack创建记录器(logger)的速度也更快:13毫秒,而在Log4J中需要23毫秒。更重要的是,它获取已存在的记录器只需94纳秒,而Log4J需要2234纳秒,时间减少到了1/23。跟JUL相比的性能提高也是显著的。

log4j配置文件

### 注:log4j.properties配置文件要放在resources目录下
# 指定日志的输出级别与输出端(输出级别,自定义输出端名称,自定义输出端名称....)
log4j.rootLogger = trace,console,myFile,rollingFile,dailyFile,dbFile

###### 控制台输出配置
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 使用PatternLayout来声明日志用自定义格式
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# 针对PatternLayout来用conversionPattern设置格式
log4j.appender.console.layout.conversionPattern = %d [%t] %-5p [%c] - %m%n

###### 文件输出配置
log4j.appender.myFile = org.apache.log4j.FileAppender
log4j.appender.myFile.layout = org.apache.log4j.PatternLayout
log4j.appender.myFile.layout.conversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n
# 是否以追加日志的形式添加(默认就是true)
log4j.appender.myFile.append = true
# 指定日志的输出路径
log4j.appender.myFile.file = ./fileLog.log
# 指定日志的文件编码
log4j.appender.myFile.encoding = utf-8

###### 文件自动按大小拆分配置
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.conversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n
log4j.appender.rollingFile.append = true
log4j.appender.rollingFile.file = ./fileRollingFileLog.log
log4j.appender.rollingFile.encoding = UTF-8
# 文件内容超过2KB则进行拆分,拆分的最多文件由maxBackupIndex定义
log4j.appender.rollingFile.maxFileSize = 2KB
# 文件拆分的数量(这里是3),当文件拆分的数量超限时则最新拆分出的文件覆盖最老的日志文件
log4j.appender.rollingFile.maxBackupIndex = 3

###### 文件自动按日期拆分配置
log4j.appender.dailyFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.conversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n
log4j.appender.dailyFile.append = true
log4j.appender.dailyFile.file = ./dailyRollingFile.log
log4j.appender.dailyFile.encoding = UTF-8
# 文件拆分的日期 正常按照 '.'yyyy-MM-dd 以天为拆分,这里我以每秒拆分一次
log4j.appender.dailyFile.datePattern = '.'yyyy-MM-dd HH-mm-ss

# MySQL输出配置
log4j.appender.dbFile = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.dbFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dbFile.layout.conversionPattern = %p %r %c %t %d{yyyy/MM/dd HH:mm:ss:SSS} %m %l %F %L %% %n
log4j.appender.dbFile.URL = jdbc:mysql://localhost:3306/log4j?serverTimezone=GMT%2B8&useAffectedRows=true&useSSL=false
log4j.appender.dbFile.User = root
log4j.appender.dbFile.Password = 123
log4j.appender.dbFile.Sql=INSERT INTO log(project_name, create_date, level, category, file_name, thread_name, line, all_category, message) \
  values('log4j_xiaofeng', '%d{yyyy-MM-dd HH:mm:ss}', '%p', '%c', '%F', '%t', '%L', '%l', '%m')

logback配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--定义日志格式参数,后面可以通过${myPattern}使用-->
    <property name="myPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %-5level %msg%n"/>
    <!--定义日志路径参数,后面可以通过${myPattern}使用-->
    <property name="file_dir" value="D:/logs"/>

    <!--定义FileAppender 用于在文件上输出日志-->
    <appender name="fileAppend" class="ch.qos.logback.core.FileAppender">
        <!--日志文件名称-->
        <file>${file_dir}/fileLogback.log</file>
        <!--配置日志输出格式,并引用 myPattern 自定的日志格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${myPattern}</pattern>
        </encoder>
    </appender>

    <!--定义FileAppender 用于在文件上输出日志-->
    <appender name="fileHtmlAppend" class="ch.qos.logback.core.FileAppender">
        <file>${file_dir}/fileLogback.html</file>
        <!--因为是要输出HTML格式,所以需要布局包装器一下-->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!--设置最终的输出样式-->
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%level%d{yyyy-MM-dd HH:mm:ss}%c%M%L%thread%m</pattern>
            </layout>
        </encoder>
    </appender>
    
    <!--配置日志记录器并设置日志记录器的打印级别-->
    <root level="ALL">
        <!--引入appender....-->
        <appender-ref ref="fileAppend"/>
        <appender-ref ref="fileHtmlAppend"/>
    </root>
</configuration>

拆分文档

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--定义日志格式参数,后面可以通过${myPattern}使用-->
    <property name="myPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %-5level %msg%n"/>
    <!--定义日志路径参数,后面可以通过${myPattern}使用-->
    <property name="file_dir" value="D:/logs"/>

    <!--定义RollingFileAppender 用于在文件上输出日志并拆分归档-->
    <appender name="rollFileAppend" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--定义日志输出的路径-->
        <!--这里的scheduler.manager.server.home 没有在上面的配置中设定,所以会使用java启动时配置的值-->
        <!--比如通过 java -Dscheduler.manager.server.home=/path/to XXXX 配置该属性-->
        <file>${scheduler.manager.server.home}/fileRollLogback.log</file>
        <!--配置日志输出格式,并引用 myPattern 自定的日志格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${myPattern}</pattern>
        </encoder>
        <!--基于大小和时间滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--按照时间和压缩格式声明文件名 压缩文件为.gz-->
            <fileNamePattern>${scheduler.manager.server.home}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
            <!--按照文件大小拆分 每个文件达到500MB会自动压缩归档-->
            <maxFileSize>500MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--配置日志记录器并设置日志记录器的打印级别-->
    <root level="ALL">
        <!--引入appender....-->
        <appender-ref ref="rollFileAppend"/>
    </root>
</configuration>

过滤器及异步打印

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--定义日志格式参数,后面可以通过${myPattern}使用-->
    <property name="myPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %-5level %msg%n"/>

    <!--定义ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="consoleAppend" class="ch.qos.logback.core.ConsoleAppender">
        <!--显示控制台日志颜色 System.err【红色】 System.out【默认白色】-->
        <target>System.err</target>
        <!--配置日志输出格式,并引用 myPattern 自定的日志格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${myPattern}</pattern>
        </encoder>

        <!--LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,
        过滤器会根据onMath 和 onMismatch接收或拒绝日志。-->
        <!--例如:将过滤器的日志级别配置为INFO,所有INFO级别的日志交给appender处理,非INFO级别的日志,被过滤掉。-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--        <level>INFO</level>-->
<!--        <onMatch>ACCEPT</onMatch>-->
<!--        <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
        <!--ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,
        过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。-->
        <!-- 过滤掉所有低于 DEBUG 级别的日志,留下DEBUG及以上级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>
    
    <!--配置异步日志-->
    <appender name="asyncAppend" class="ch.qos.logback.classic.AsyncAppender">
        <!--要使用到异步的Appender-->
        <appender-ref ref="consoleAppend"/>
    </appender>
    
    <!--配置日志记录器并设置日志记录器的打印级别-->
    <root level="ALL">
        <!--引入appender....-->
        <appender-ref ref="asyncAppend"/>
    </root>
</configuration>

自定义logger

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--定义日志格式参数,后面可以通过${myPattern}使用-->
    <property name="myPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %-5level %msg%n"/>
    <!--定义ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="consoleAppend" class="ch.qos.logback.core.ConsoleAppender">
        <!--显示控制台日志颜色 System.err【红色】 System.out【默认白色】-->
        <target>System.err</target>
        <!--配置日志输出格式,并引用 myPattern 自定的日志格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${myPattern}</pattern>
        </encoder>
    </appender>

    <!--additvity="false" 不继承父元素-->
    <logger name="cn.xw" level="INFO" additvity="false">
        <!--自定义logger中配置appender-->
        <appender-ref ref="consoleAppend"/>
    </logger>
</configuration>

加载顺序

logback在启动的时候,会按照下面的顺序加载配置文 ①:如果java程序启动时指定了logback.configurationFile属性,就用该属性指定的配置文件。 如java -Dlogback.configurationFile=/path/to/mylogback.xml Test , 这样执行Test类的时候就会加载/path/to/mylogback.xml配置 ②:在classpath中查找 logback.groovy 文件 ③:在classpath中查找 logback-test.xml 文件 ④:在classpath中查找 logback.xml 文件 ⑤:如果是jdk6+,那么会调用ServiceLoader 查找com.qos.logback.classic.spi.Configurator接口的第一个实现类 ⑥:自动使用ch.qos.logback.classic.BasicConfigurator,在控制台输出日志 注:上面的顺序表示优先级,使用java -D配置的优先级最高,只要获取到配置后就不会再执行下面的流程。 相关代码可以看ContextInitializer#autoConfig()方法。

java 日志框架总结 一、java 日志         在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此对于一个项目而言,日志记录是一个非常重要的问题。因此,如何选择一个合适的日志记录框架也非常重要。 在《阿里巴巴Java开发手册(正式版)》中,日志规约一项第一条就强制要求使用SLF4J: 1.【强制】应用中不可直接使用日志系统(Log4j、L... 阅读详情

相关推荐

Python+Seaborn可视化:双因素方差分析结果这样呈现更专业

本文详细介绍了如何利用Python中的Seaborn和statsmodels库,专业地执行并可视化双因素方差分析结果。通过模拟实验数据,演示了从模型构建、统计检验(包括交互作用分析)到诊断验证的全流程。重点展示了如何使用Seaborn绘制交互效应图、组合分布图及热图,将复杂的统计结果转化为直观、富有洞察力的可视化图表,助力科研论文与商业报告的专业呈现。

weixin_29274969的博客 137

java基础:日志框架

文章目录一. 日志技术的概述二. 日志技术体系三. Logback日志框架四. Logback快速入门五. Logback 配置详解5.1 输出位置,格式设置 一. 日志技术的概述 程序中的日志可以用来记录程序运行过程中的信息,并可以进行永久的存储。 采用输出语句到控制台的弊端: 1.信息只能显示在控制台 2.不能将其记录到其他位置(文件,数据库) 3.想取消记录的信息需要修改代码才可以完成 日志技术具备的优势: 1.可以将系统执行的信息选择性的记录到指定的位置(控制台,文件,数据库) 2.可以随时以

m0_51416683的博客 3896

别再只会用官网例子了!Vxe-Table过滤功能深度自定义:从下拉框到服务端筛选的完整配置流程

本文深入解析Vxe-Table表格组件的过滤功能,从基础UI定制到服务端筛选的完整实现流程。通过实战案例演示如何超越官方示例,实现下拉框、日期范围等复杂过滤交互,并详细讲解混合过滤策略与性能优化技巧,帮助开发者应对大数据量场景下的表格筛选需求。

weixin_42526353的博客 205

java日志框架详解

java开发常用日志框架详解

hjji12的博客 3125

Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾

电商秒杀系统框架回顾项目简介外部依赖框架回顾项目要点项目中存在的问题小结 课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以跟着视频练习一下这个项目; 项目简介 通过SpringBoot快速搭建的前后端分离的电商基础秒杀项目。项目通过应用领域驱动型的分层模型设计方式去完成:用户otp注册、登陆、查看、商品列表、进入商品详情以及倒计时秒...

ghw15221836342的博客 3719

把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析

ABAP SQL窗口函数在不丢失明细记录的前提下,为每行数据提供组内统计和排名功能。它通过OVER子句定义计算窗口,支持三类函数:聚合型(AVG/SUM等)、排名型(ROW_NUMBER/RANK等)和取值型(LEAD/LAG)。相比GROUP BY会合并多行数据,窗口函数保留原始记录同时附加计算结果,特别适合需要保留明细又要展示统计信息的业务场景,如销售排名、客户分层分析等。语法核心是OVER子句,通过PARTITION BY分组,ORDER BY排序,可灵活定义计算范围。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1273

Java常用日志框架介绍

对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。java领域存在多种日志框架,目前常用的日志框架包括Log4j 1,Log4j 2,Commons Logging,Slf4j,Logback,Jul。由于历史原因JDK自身提供的Log组件出现的较晚,导致Jdk提供Log组件时第三方社区的日志组件已经比较稳定成熟。

weixin_39827856的博客 1780

RK3568平台(网络篇)添加网络交换芯片RTL8306M

该交换芯片支持I2C、SPI、mdio通信,但是看ast1520的uboot代码采用的是mdio去通信phy芯片的,所以暂时也先采用mdio的方式,需要配置相应的引脚才可以配置成mdio通信模式,具体的配置硬件工程师解决。RTL8306M芯片上可能没有提供MDC/MDIO接口,可以通过GPIO(General Purpose Input/Output)来模拟,GPIO可实现串行输入输出,且一般CPU上会提供很多GPIO接口供用户自定义使用。

weixin_49303682的博客 3934

Java 日志系列(一):详解主流日志框架Log4j、Log4j 2、JUL、Commons Logging和Slf4j&Logback

优雅的日志系统可以记录操作轨迹,监控系统运行状况以及回溯系统故障。在工作中,部分工程师对主流的日志框架仍然是一知半解,日常应用还停留在复制粘贴的层面,因此写作本文,希望对读者有所帮助。笔者将通过 3 篇文章全面系统地介绍 Java 日志框架,主要内容如下:日志的意义与价值;Java 日志框架进化史;日志门面与日志系统;日志框架的使用选择;日志使用中需要遵循的规范及注意事项;日志使用示例及常见报错。

Jin_Kwok的博客 3319

视觉Transformer实战 | Transformer详解与实现

本文系统介绍了 Transformer 架构的核心原理与实现。相比传统 RNN 和 CNN,Transformer 凭借自注意力机制有效捕捉序列中的长距离依赖关系,支持并行训练,显著提升效率。其核心创新在于通过查询、键、值向量计算注意力权重,理解单词间的语义关联。架构包含编码器-解码器结构:编码器通过多头自注意力和前馈网络提取输入特征;解码器利用掩码自注意力和交叉注意力生成输出。本文使用 PyTorch 实现了缩放点积注意力、位置编码、层归一化等关键模块,并构建了完整的 Transformer 模型。

盼小辉丶的博客 4万+

基于simulink的BMS系统中电池单体故障隔离与恢复建模

本文介绍了使用Simulink构建BMS电池单体故障诊断与容错控制模型的方法。主要内容包括:1)搭建12串锂电池组模型;2)实现单体故障注入(过压、断线等);3)设计故障诊断与隔离模块(采用Stateflow状态机);4)开发恢复判断逻辑(需满足电压、温度等条件);5)系统监控与仿真设置。文章还提供了工程实践建议,如防环流设计、通信冗余等,并指出进阶方向(多故障处理、AI预警等)。该模型适用于新能源汽车、储能系统的BMS设计,可提高系统可靠性和安全性。

xiaoheshang_123的博客 140

一文弄懂Java日志框架

本文涉及日志的概念、日志门面、JUL日志框架、Log4J日志框架、JCL日志门面、SLF4J日志门面、LogBack日志框架、Log4J2日志框架、SpringBoot中的日志使用等内容。

十八岁讨厌编程的博客 2396

KVM — 与 QEMU 和 Libvirt 的关系

目录目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用前言如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会有所混淆, 傻傻的分不清. 尤其在看虚拟化技术文档时导致理解能力下降, 所以在开始学习虚拟化技术之前对这些概念有一个整体的认识和清晰的理解, 就显得很有必要了.KVMKVM(Kernel-basedVirtu

烟云的计算 5736

Java系统中常用日志框架

文章目录日志介绍日志概念日志作用Java中常用日志框架Java常用日志框架之间的关系日志门面框架日志实现框架 日志介绍 日志概念 日志:在计算机领域,日志文件(logfile)是一个记录了发生在运行中的操作系统或其他软件中的事件的文件,或者记录了在网络聊天软件的用户之间发送的消息1。 日志记录(Logging):是指保存日志的行为。最简单的做法是将日志写入单个存放日志的文件。 日志级别2:...

Frank的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【JAVA日志框架】JUL,JDK原生日志框架详解。

Java日志体系混乱?系列文章第一篇,五分钟,快速掌握JDK原生日志框架——JUL。

BugMan的博客 5198

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java 日志框架

Java 日志框架

快乐的小三菊的博客 2256

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JAVA日志框架,这一篇就够了

自定义的配置文件。假设我们将其命名为,用默认配置做更改创建好配置文件后,你需要告诉使用这个自定义的配置文件。这通常在程序启动时完成,例如在主类的main//之后正常使用就行到这里,你应该了解怎么在代码中使用和配置日志框架了,其实其他日志框架都差别不大。通过简单的JUL框架,我们后面将学习主流框架搭配:log4j2(实现) + slf4j(门面)

m0_61160520的博客 2509

Java日志框架的发展历史,你不想了解一下吗

log4j,JUL,slf4j,logback,log4j2等日志框架之间到底有什么关系,Java日志框架究竟经历了什么样的发展历程,相信有很多人都对此充满了好奇。本文按照时间线对Java日志框架的发展历史进行介绍,使你对Java日志框架有一个全新的认识!

小新要变强的博客 1412

Java日志框架梳理-Java日志框架总览

常见的Java日志框架 log4j logback j.u.l (java.util.logging) 常见的Java日志门面 SLF4J commons-logging 其中,j.u.l是Java原生库,但是在Java 1.4中才被引用; commons-logging出自Apache,用于桥接j.u.l和log4j;log4j、logback和SLF4J出自同一个作者(Ceki),目前被广泛应

xktxoo的博客 6547

java 日志框架_java的各种日志框架

本文是作者原创,版权归作者所有.若要转载,请注明出处.文章中若有错误和疏漏之处,还请各位大佬不吝指出,谢谢大家.java日志框架有很多,这篇文章我们来整理一下各大主流的日志框架,包括log4j logback jul(java.util.logging) jcl(commons-logging) slf4j(simple log facade for java)等常用框架目前java日志...

weixin_36212762的博客 830

Java日志框架

Java日志系统概述与最佳实践 本文系统介绍了Java生态中的日志框架体系,主要包括JUL、Log4j、Logback和Log4j2等主流日志框架,以及JCL和SLF4J两种日志门面技术。文章详细阐述了日志的概念、分类(调试日志和系统日志)及其在系统开发中的重要作用,比较了各日志框架的特点和演进历史,重点分析了JUL的组件架构和使用方式。同时介绍了日志门面的设计理念和优势,推荐采用SLF4J+Logback/Log4j2的组合方案作为最佳实践,实现日志输出与业务代码的解耦,提高系统的可维护性和扩展性。通过配

tonysong111073的专栏 817

Java 日志框架(一)

Logger:记录器,应用程序通过获取 Logger 对象,调用它的 API 来发布日志信息。Appender:也叫 Handler,每个 Logger 都会关联一组 Handler,Handler 负责对日志做记录,它的实现决定了日志保存的位置(控制台、文件、网络上的其他日志服务Layout:负责日志的格式化自定义一个日志级别,要求输出所有级别的日志记录,而不只是 >= info 级别的@Test// 1. 获取日志记录器对象// 关闭系统默认配置。

功不唐捐,玉汝于成 1477

java日志框架简介(日志框架选型)

java 日志框架介绍

銠槍--突廆孒 4383

Java日志框架介绍

​今天来聊一聊 Java 日志框架,不管是在项目开发阶段的调试,还是项目上线后的运行,都离不开日志。日志具有处理历史数据、定位程序问题、理解程序运行过程等重要作用。一起系统地了解下 Java 日志框架。

promote的博客 1349
上一篇: Java——笔记
下一篇: Mysql8创建用户及授权
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值