java常见日志

一、 概念

 

Commons-logging : apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于JDBC 的api 接口,具体的的JDBC driver 实现由各数据库提供商实现。通过统一接口解耦,不过其内部也实现了一些简单日志方案。

 

Log4j : 经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。

 

Slf4j : 全称为Simple Logging Facade for JAVA:java简单日志门面。是对不同日志框架提供的一个门面封装。可以在部署的时候不修改任何配置即可接入一种日志实现方案。和commons-loging 应该有一样的初衷。个人感觉设从计上更好一些,没有commons 那么多潜规则。同时有两个额外特点:

 

1. 能支持多个参数,并通过{} 占位符进行替换,避免老写logger.isXXXEnabled 这种无奈的判断,带来性能提升见:http://www.slf4j.org/faq.html#logging_performance 。

 

2.OSGI 机制更好兼容支持

 

一图胜千言,官网上的一个图:

java常见日志

 

从上图可以发现,选择还是很多的。

 

Logback : LOGBack 作为一个通用可靠、快速灵活的日志框架,将作为Log4j 的替代和SLF4J 组成新的日志系统的完整实现。官网上称具有极佳的性能,在关键路径上执行速度是log4j 的10 倍,且内存消耗更少。具体优势见:

 

http://logback.qos.ch/reasonsToSwitch.html

 

二、 常见日志方案和注意事项

 

1.Commons-logging+log4j : 经典的一个日志实现方案。出现在各种框架里。如spring 、webx 、ibatis 等等。直接使用log4j 即可满足我们的日志方案。但是一般为了避免直接依赖具体的日志实现,一般都是结合commons-logging 来实现。常见代码如下:

 

import org.apache.commons.logging.Log;

 

import org.apache.commons.logging.LogFactory;

 

private static Log logger = LogFactory.getLog(CommonsLoggingTest.class);

 

代码上,没有依赖任何的log4j 内部的类。那么log4j 是如何被装载的?

 

Log 是一个接口声明。LogFactory 的内部会去装载具体的日志系统,并获得实现该Log 接口的实现类。而内部有一个Log4JLogger 实现类对Log 接口同时内部提供了对log4j logger 的代理。LogFactory 内部装载日志系统流程:

 

1. 首先,寻找org.apache.commons.logging.LogFactory 属性配置

 

2. 否则,利用JDK1.3 开始提供的service 发现机制,会扫描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory 文件,若找到则装载里面的配置,使用里面的配置。

 

3. 否则,从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。

 

4. 否则,使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现。

 

从上述加载流程来看,如果没有做任何配置,只要引入了log4j 并在classpath 配置了log4j.xml ,则commons-logging 就会使log4j 使用正常,而代码里不需要依赖任何log4j 的代码。

 

 

 

 

 

2.Commons-logging+log4j+slf4j

 

 

如果在原有commons-logging 系统里,如果要迁移到slf4j, 使用slf4j 替换commons-logging ,也是可以做到的。原理使用到了上述commons-logging 加载的第二点。需要引入Org.slf4j.jcl-over-slf4j-1.5.6.jar 。这个jar 包提供了一个桥接,让底层实现是基于slf4j 。原理是在该jar 包里存放了配置META-INF/services/org.apache.commons.logging.LogFactory =org.apache.commons.logging.impl.SLF4JLogFactory ,而commons-logging 在初始化的时候会找到这个serviceId ,并把它作为LogFactory 。

 

完成桥接后,那么那么简单日志门面SLF4J 内部又是如何来装载合适的log 呢?

 

原理是SLF4J 会在编译时会绑定import org.slf4j.impl.StaticLoggerBinder; 该类里面实现对具体日志方案的绑定接入。任何一种基于slf4j 的实现都要有一个这个类。如:

 

org.slf4j.slf4j-log4j12-1.5.6: 提供对 log4j 的一种适配实现。

 

Org.slf4j.slf4j-simple-1.5.6: 是一种 simple 实现,会将 log 直接打到控制台。

 

……

 

那么这个地方就要注意了:如果有任意两个实现slf4j 的包同时出现,那就有可能酿就悲剧,你可能会发现日志不见了、或都打到控制台了。原因是这两个jar 包里都有各自的org.slf4j.impl.StaticLoggerBinder ,编译时候绑定的是哪个是不确定的。这个地方要特别注意!!出现过几次因为这个导致日志错乱的问题。

 

 

 

 

 

3.Slf4j+logback

 

Slf4j 和log4j 作者都是同一个人。

 

Logback 号称在性能各方面有很多优势,也很诱人。

 

直接使用SLf4j 也很简单:

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class HelloWorld {

public static void main(String[] args) {

Logger logger = LoggerFactory.getLogger(HelloWorld.class);

logger.info("Hello World");

}

}

 

代码里也看不到任何具体日志实现方案的痕迹。

 

Logback 没用过,看到过一些诱人介绍。具体大家可以去研究。logback 。

 

注意事项

 

使用日志配置的时候一定要明白需求,同时避免冲突。

 

如使用SLF4j 的时候为了避免冲突,一定要保障只有一种实现类jar 包在里面。

 

当遇到日志错乱等问题时,可以从这几个方面来排查

手把手教你用STM32H743+FreeRTOS+LWIP搭建物联网网关(附完整工程) 本文详细介绍了如何使用STM32H743微控制器结合FreeRTOS实时操作系统和LWIP协议栈构建高性能物联网网关。内容涵盖硬件配置、FreeRTOS任务设计、LWIP协议栈优化及物联网协议集成,提供完整工程示例,助力开发者快速实现稳定可靠的网络通信枢纽。 阅读详情

相关推荐

GD32F303 Keil 工程项目从零搭建实战指南

本文是一份详细的GD32F303 Keil工程项目从零搭建实战指南。文章阐述了亲手搭建工程的重要性,并逐步指导开发者完成从环境准备、目录规划、工程创建、文件添加、关键配置到编译调试的全过程。重点讲解了如何正确选择启动文件、添加外设库、配置头文件路径和全局宏,旨在帮助开发者深入理解工程结构,掌握GD32F303开发的核心技能,实现从“会用”到“懂”的跨越。

weixin_29190651的博客 405

Java日志详解

日志的定义:程序执行过程中,记录程序运行的情况的信息日志的作用:Log日志,主要用于记录程序运行的情况,以便于程序在部署之后的排错调试等,也有利于将这些信息进行持久化(如果不将日志信息保存到文件或数据库,则信息便会丢失)。

刘皇叔说Java的博客 7181

使用cubeMX生成USB HID设备

本文主要介绍如何使用stm32开发板和cubeMX生成HID设备,供参考。

专注音频,高效工作,快乐生活! 970

java Logger 的使用

Logger所对应的属性文件在安装jdk目录下的jre/lib/logging.propertieslogging.properties文件中的handlers= java.util.logging.ConsoleHandler  将日志内容输出到控制台handlers= java.util.logging.FileHandler     将日志文件输出到文件中handlers= java.uti

binxigogo的专栏 1万+

TMS320F280039 CMD文件配置避坑指南:从.map文件看懂内存分配与溢出排查

本文详细解析了TMS320F280039芯片的CMD文件配置问题,通过.map文件分析内存分配与溢出排查。文章提供了实用的诊断技巧和解决方案,帮助开发者有效应对段溢出、地址重叠和栈堆冲突等常见问题,优化DSP程序的内存管理。

weixin_29168813的博客 443

V93000 SmarTest 8入门:从零搭建你的第一个半导体测试程序

半导体测试是芯片从设计走向量产的关键环节,而ATE(自动化测试设备)正是支撑这一环节的核心工具。理解ATE测试程序开发的基本原理,不仅需要掌握测试机台的硬件架构,还要熟悉其软件环境中的管脚映射、电平时序、测试流程等底层逻辑。V93000作为爱德万的主力平台,其SmarTest 8环境通过对象化与流程化设计,将复杂的芯片测试任务拆解为可配置、可复用的模块,极大提升了并行测试效率与调试的便利性。无论是数字逻辑芯片的功能验证,还是模拟混合信号器件的参数测量,掌握SmarTest 8的核心操作都能帮助你快速搭建出可

weixin_31476015的博客 240

java日志,需要知道的几件事

如果对于commons-loging 、log4j 、slf4j 、LogBack 等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮助,当然如果对这块有更深刻理解的同学,也贡献出自己的知识和见解。 一、 概念 Commons-logging : apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于JDBC 的api 接口,具体的的JDBC driver 实现由各数据库提供商实现。通过统一接口解耦,不过其内部也实

horizon_cbl的专栏 691

Ubuntu运行vmware时报错Vmware Unable to install all modules!Use shipped Linux kernel AIO access library解决。

Ubuntu运行vmware时报错Vmware Unable to install all modules! vmware --version 提示下面内容: [AppLoader] Use shipped Linux kernel AIO access library. An up-to-date "libaio" or "libaio1" package from your system is preferred. VMware Workstation 16.1.2 build-17966106

wto882dim的博客 2848

java swing 日志_Swing应用开发实战系列之五:后台日志信息前台监控器

importjavax.swing.JDialog;importjavax.swing.UIManager;importjavax.swing.GroupLayout;importjavax.swing.GroupLayout.Alignment;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing....

weixin_42252435的博客 403

Vue - 最新详细实现滑块拖动拼图验证,网站登录验证滑块验证功能,拖动滑块到图片缺口的位置即为成功,滑块验证安全检测(详细示例代码,一键复制运行)

您一定见过很多系统都“配备”了滑块验证、拼图验证、找不同等,本质上都是为了验证登录系统的是人还是机器(代码),如下图所示效果: 您打开项目根目录,终端执行如下命令:拼图式拖动滑块验证 验证拖动滑块验证,滑动拼图/图片点选验证 接下来,在中加入以下代码: 如下图所示: 更多配置示例和参数详见官方文档,以下便是如上效果图的代码:.........

🏆 前端领域优质创作者 1万+

4、文化遗产数字记录的伦理框架构建

本文探讨了在数字技术快速发展的背景下,如何构建一个伦理框架以指导文化遗产的数字记录工作。文章分析了遗产保护的重要性以及当前面临的挑战,包括气候变化、全球化和技术变革等。同时,结合国际古迹遗址理事会(ICOMOS)的伦理原则和加拿大遗产专业人员协会(CAHP)的行为准则,提出了六个核心伦理类别,并讨论了其在实践中的应用。文章强调,伦理框架不仅有助于提高数字记录的质量和可持续性,还能促进专家合作、保护社区利益并确保数字遗产的长期可访问性。未来需要持续完善这一框架,以应对不断变化的技术和社会环境带来的新挑战。

7h6j5k4l3的博客 96

Java日志,需要知道的几件事(commons-logging,log4j,slf4j,logback)

如果对于commons-loging、log4j、slf4j、LogBack等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮助,当然如果对这块有更深刻理解的同学,也贡献出自己的知识和见解。 一、    概念 Commons-logging:apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。类似于JDBC的a

kobejayandy的专栏 9835

SAP AI Core 高阶能力实战参考

文章摘要:本文探讨了在企业SAP架构中整合GenAI技术的工程化实践,重点分析了SAP AI Core的高阶能力应用。作者指出,企业级AI应用需解决多轮对话管理、Git同步工作流、提示词治理等核心问题,而非简单接入大模型API。技术方案展示了如何通过SAP AI Core的orchestration service管理对话历史,利用GitOps实现AI资产版本控制,并强调prompt template在审计合规中的治理价值。全文以SAP技术栈(ABAP/RAP/Fiori)为背景,阐释了AI能力与企业核心系

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

Java日志框架研究及常见配置

该文分析了常用的日志框架,并从结构原理上给出一些讲解,最后给出了常用日志的常见配置,希望对大家有用

clannadyue的专栏 1831

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 日志系列(三):日志使用示例及常见报错

详细解读Java日志使用案例及常见报错1: Failed to load class "org.slf4j.impl.StaticLoggerBinder";报错2:Class path contains multiple SLF4J bindings;报错3:Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError

Jin_Kwok的博客 854

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析

Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息

qq_44700578的博客 2042

Java中常见的日志框架

可能是太过于常见了,所以使得大家很少关注,只是要用到的时候复制粘贴一份就行,甚至连日志配置文件中的配置语法都不清楚。另外一方面,Java中提供的日志组件太多了,一会儿log4j,一会儿logback,一会儿又是log4j2.不清楚其中的关联 Java中常用的日志框架: Log4j、Log4j 2、Commons Logging、Slf4j、Logback、Jul(Java Util Logging) ...

Leon_Jinhai_Sun的博客 192

基于Java的日志脱敏工具sensitive使用常见问题解决方案

`sensitive` 是一个基于Java的日志脱敏工具框架,它通过注解的方式实现日志脱敏,减少了代码的入侵性并简化了开发过程。该工具框架支持自定义脱敏策略,并且可以与常见的日志框架如log4j2和logback集成,提供统一脱敏策略。 ### 主要编程语言 - Java ## 2. 新手使用时需特别注意的问题及解决步骤 ### 问题一:如何集成sensitive到现有项目中? **解决步...

gitblog_00924的博客 601

java log 打印函数名_Java编码常见的Log日志打印问题

前言本文总结了作者在Java代码检视中遇到的一些关于日志打印的问题,并给出修改建议。因能力有限,难免存在错漏,欢迎指正。一.不规范的异常打印使用slf4j日志组件时,logger.error(与log.warn)接受Throwable参数,以打印异常名和详细的堆栈信息(可能内部调用e.printStackTrace())。但书写打印语句时,需要注意格式。例如:1 logger.error("Bes...

weixin_33835461的博客 883

Java常见日志小结(Log4J,JUL,JCL,SLF4J)

Java常见日志小结(Log4J,JUL,JCL,SLF4J) Java常见日志小结(Log4J,JUL,JCL,SLF4J)_wang7241的博客-优快云博客一、前言 开发了这么多年,我一直很纳闷Java为什么搞出来这么多的日志,感觉好乱啊,完全不知道他们之间有什么奸情。在我看完一个关于日志的视频后,终于有了答案,遂在该文中总结。二、简介 Log4J:可以直接记录日志<!-- https://mvnrepository.com/artifact/log4j/log4j --><de

极客on之路 596

java打印变量编码_Java编码常见的Log日志打印问题

前言本文总结了作者在Java代码检视中遇到的一些关于日志打印的问题,并给出修改建议。因能力有限,难免存在错漏,欢迎指正。一.不规范的异常打印使用slf4j日志组件时,logger.error(与log.warn)接受Throwable参数,以打印异常名和详细的堆栈信息(可能内部调用e.printStackTrace())。但书写打印语句时,需要注意格式。例如:1 logger.error("Bes...

weixin_26704349的博客 465

java log日志常见误区

原因分析 很多程序员会无意间可能会这样打日志 logger.error(e); logger.error(e.getMessage); logger.error("错误信息:" + e); 看下logger.error代码就知道error有2个重载方法 public void error(String msg); public void error(String msg, Throwable t...

bugpool的博客 2444

java常见的日志框架

以上就是java常见的日志框架,希望对大家有所帮助。我是李老师说Java,专注Java各类问题的解决、Java最新技术的分享、Java零基础到精通的教学,关注我,带你开启程序开发之路。是一套Java日志接口,以前叫Jakarta Comons Loging,后更名为Commons Loging。Java Utill loging,Java1.4以来的官方日志。2、Log4j2是apache开发的Log4j升级产品。1、Log4j是基于Java的日志记录工具。4、Slf4j是一套简单的Java日志门面。

2301_76740033的博客 478

Java中几种常见的日志

Java中几种常见的日志

a16696747377的博客 1496

为什么你的VSCode Java日志总是不输出?一文解决8大常见陷阱

解决VSCode Java调试日志不输出的常见问题,涵盖配置错误、断点设置、启动方式等8大陷阱。帮助开发者快速定位日志缺失原因,提升调试效率。适用于Spring Boot及普通Java项目,值得收藏。

CodeIsle的博客 898
上一篇: Flex用JSON处理返回的数据
swingchen
博客等级 码龄20年 0粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值