slf4j

java日志架构

自古美人都是妖i 提交于 2020-03-07 02:58:37
第一章介绍 1.1 为什么有日志及框架? 跟踪用户对系统访问 统计 Debug 1.2 日志框架 市场上存在非常多的日志框架。 JUL(java.util.logging),JCL(Jakarta Commons Logging),Log4j,Log4j2,Logback(具体框架,springboot使用)、SLF4j、jboss-logging等。 Spring 在框架内部使用JCL。 Log4j被apache收购,升级,改为log4j2,框架改动很大,只是借用之名。 Log4j,Logback,SLF4j都是同一个作者。 1.3 优选slf4j+logback 第二章 原理 2.1 如何在系统中使用slf4j+logback https://www.slf4j.org 2.2 使用slf4j+其他实现 第三章 历史遗留问题 3.1 遗留问题解决 如何将这些框架统一日志记录,统一使用slf4j进行输出? springboot(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx https://www.slf4j.org/legacy.html 3.2 想将应用中所使用的日志框架commons-logging排除掉 3.3 引入jcl转换为slf4j依赖包(偷梁换柱)

SLF4J日志门面

僤鯓⒐⒋嵵緔 提交于 2020-03-04 04:06:15
SLF4J官网: http://www.slf4j.org/ SLF4J的作用通俗点讲,就是可以让我们的项目以最小的代价更换不同的日志系统。无需修改代码,只需要添加、删除相应的jar包和配置文件。 1.添加”slf4j-api-xxx.jar”到项目中。 (xxx代表版本号,本文用的是1.7.7版本) 2.建个项目,编写几句简单的日志记录的代码。 //import org.apache.log4j.PropertyConfigurator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class test_slf4j { public static void main(String[] args) { // PropertyConfigurator.configure("log4j.properties"); Logger logger = LoggerFactory.getLogger(test_slf4j.class); logger.trace("I'm trace log."); logger.debug("I'm debug log."); logger.info("I'm info log."); logger.warn("I'm warn log."); logger.error("I

logback快速入门

二次信任 提交于 2020-03-03 02:15:10
一、slf4j The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks, such as java.util.logging, logback and log4j. SLF4J allows the end-user to plug in the desired logging framework at deployment time. 简单日志门面(SLF4J)为各种日志框架提供了一个简单的接口,使得用户能够在部署的时候配置其所希望的日志系统。 在实际的开发过程中,可能会使用各种不同的日志系统,每个日志系统的风格、样式和布局也不尽相同,在不同日志系统之间进行切换耗时耗力。使用slf4j无需考虑具体使用哪个日志系统,统一使用slf4j的API进行开发。当要在不同日志系统之间进行切换时,只需要选择对应的日志系统包即可,十分灵活方便(当然,日志系统本身的jar包和配置文件还是需要的)。还有一点好处是,slf4j能够支持多个参数,并且通过{}占位符进行替换,避免了各种各样的判断条件,从而提升了性能。 到官网下载最新版本的slf4j,解压缩。slf4j-api-version.jar是slf4j的核心jar包。除此之外

java计算对象占用内存大小:lucene专用于计算堆内存占用大小的工具类

杀马特。学长 韩版系。学妹 提交于 2020-03-01 13:12:51
RamUsageEstimator,maven坐标: <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>4.0.0</version> </dependency> RamUsageEstimator就是根据java对象在堆内存中的存储格式, 通过计算Java对象头、实例数据、引用等的大小,相加而得,如果有引用,还能递归计算引用对象的大小。 RamUsageEstimator的源码并不多,几百行,清晰可读。这里不进行一一解读了。 它在初始化的时候会根据当前JVM运行环境、CPU架构、运行参数、是否开启指针压缩、JDK版本等综合计算对象头的大小,而实例数据部分则按照java基础数据类型的标准大小进行计算。 思路简单,同时也在一定程度上反映出了Java对象格式的奥秘! import java.util.List; import java.util.concurrent.atomic.AtomicLong; import lombok.extern.slf4j.Slf4j; import org.apache.lucene.util.RamUsageEstimator; import reactor.fn.tuple.Tuple2; import

SpringBoot_日志

家住魔仙堡 提交于 2020-03-01 01:16:27
SpringBoot SLF4J SLF4J使用方式: SLF4J使用原理: SLF4J统一日志: SpringBoot 日志 SpringBoot 日志关系: SpringBoot 日志使用: SpringBoot 日志默认配置 : SpringBoot 修改日志默认配置: SpringBoot 指定日志配置: SpringBoot 切换日志框架: SLF4J SLF4J使用方式: 在开发过程中,我们不应该直接调用日志的实现类,而是应该调用日志抽象层里面的方法; 示例: // 导入 slf4j的jar和 logback 的实现jar import org . slf4j . Logger ; import org . slf4j . LoggerFactory ; public class HelloWorld { public static void main ( String [ ] args ) { // 调用LoggerFactory的 getLogger(记录器) 去记录 HelloWorld类的信息 Logger logger = LoggerFactory . getLogger ( HelloWorld . class ) ; //进行日志记录 logger . info ( "Hello World" ) ; } } SLF4J使用原理: SLF4J 绑定

java日志组件(common-logging slf4j log4j logback)

不问归期 提交于 2020-02-29 09:54:56
一、日志接口(common-loggin&slf4j) ---------------------------------------- common-logging----------------------------------------- common-logging 是apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过 动态查找的机制 ,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱。所以使用common-logging,通常都是配合着log4j来使用。使用它的好处就是,代码依赖是common-logging而非log4j, 避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库,缺点由于其实通过 ClassLoader 动态加载,OSGI在不同组件中类加载器不同,common-logging就无法满足需求。 使用common-logging的常见代码: import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class A {

架构师必知必会:Java内置的控制反转机制”Service Provider”

纵然是瞬间 提交于 2020-02-28 11:14:58
前言 Java统治服务器编程领域多年还未有退位趋势,以IoC(控制反转)思想为核心的Spring功不可没。大多数时候,我们都可以使用Spring框架来实现我们的依赖注入,但仍有很多场景,我们期望自己的代码有更少的依赖、适应更多的场景,比如跨Android和服务端、跨JVM语言的组件拼装。 其实从Java6开始已经提供了一套依赖注入标准“Service Provider”和相应的工具”ServiceLoader”来实现我们自己的控制反转,且其已经广泛应用在JDK的扩展性设计之中(如:脚本引擎ScriptEngine, 字符集Charset, 文件系统FileSystems, 网络通讯NIO),并越来越多地被其它开源组件所使用(如:Web标准Servlet3.0, 通用日志接口slf4j-api:1.3),Java9进一步对“Service Provider”进行扩展实现了Java的模块化。所以”Service Provider”机制是Java越来越重要的基础知识之一。 容我带领各位,通过JDK文档和源码来一步步了解”Service Provider”,进而掌握通过Java自带能力零依赖实现自己的动态依赖注入的方法,或按Java标准来扩展JDK、日志、Http服务的能力。 “Service Provider“标准 ”Service Provider

「故事系列」小故事说清楚什么是日志框架

这一生的挚爱 提交于 2020-02-28 07:00:33
有天上飞的概念,就要有落地的实现 大哥大姐新年好,点赞转发不要少 文本已收录至GitHub开源仓库 Lu_JavaNodes 码云仓库地址 Lu_JavaNodes ,包含教程涉及所有思维导图,案例代码和后续讲解视频,欢迎Star增砖添瓦。 本文阅读技术要求:见过日志 没见也不要慌,如下图,这就是日志,好了,你见过了。 一个小故事说清楚日志框架 日志的作用 记录系统中的操作 记录系统的运行状况 系统错误时候,根据日志分析原因 故事开始 在一家IT企业中,项目经理虎大力(龙套) 正在指挥 程序员鹿小明(精英龙套)开发一个大型的增删改查项目。为了开发这个项目。项目组仅有的程序员鹿小明每天工作996 故事进入 V1.0 环节 one day,虎大力给鹿小明提出来一个新的需求,为了更好的进行公司的信息化建设,虎大力想要看到代码执行的情况,执行到某个业务的时候在控制台有所表示,例如:执行到查询方法的时候,需要在控制台上出现,这是一个打印方法的信息。 鹿小明一想,这好办啊,本来自己为了调试测试方便就写过很多打印语句,现在无非更多而已。于是就加班加点在所有的增删改查方法中都写了 System.out.println() 打印语句。顺利完成了这个工作。 故事进入 V2.0 环节 一段时间岁月静好 one day,虎大力找到鹿小明:你这个代码里面 System.out.println() 太多了

如何提升springboot服务吞吐量

倾然丶 夕夏残阳落幕 提交于 2020-02-27 21:51:48
背景 生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。 方案 1、undertow替换tomcat 电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤: 1、增加pom配置 <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <exclusions> <exclusion> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-tomcat</artifactid> </exclusion> </exclusions> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-undertow</artifactid> </dependency> 2、增加相关配置 server: undertow: direct-buffers: true io-threads: 4

12、日志系统解析

我只是一个虾纸丫 提交于 2020-02-27 21:12:59
1.1、日志介绍 日志分为日志门面和日志实现,日志实现是日志的门面的具体实现. 日志门面框架指的是日志实现的抽象层,定义log.info、log.error等方法,日志的门面框架主要与两个,JCL和SLF4J 日志实现指的是具体的日志功能实现,有JCL、Log4j、Logback、Log4j2 最佳组合:slf4j+logback(SpringBoot使用)或者slf4j+log4j2 // 我们可以看下,slf4j的Logger是一个接口,里面定义的方法是info、error等 package org.slf4j; public interface Logger { // 而Logback实现了Logger接口 package ch.qos.logback.classic; public final class Logger implements org.slf4j.Logger, LocationAwareLogger, AppenderAttachable<ILoggingEvent>, Serializable { 1.2、日志配置 // 待补充 1.3、日志实践 来源: oschina 链接: https://my.oschina.net/liwanghong/blog/3169053