logback

日志打印的正确姿势!

拈花ヽ惹草 提交于 2020-11-19 05:18:01
点击上方 "IT牧场" ,选择 "设为星标" 技术干货每日送达! 来源:http://t.cn/E9BkD7a 使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式: logger .debug (" Processing trade with id : [{}] and symbol : [{}] ", id , symbol ); 对于debug日志,必须判断是否为debug级别后,才进行使用: if (logger.isDebugEnabled()) { logger.debug( "Processing trade with id: " + id + " symbol: " + symbol); } 不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。 反例(不要这么做): logger.debug(

SpringBoot2.x整合logback 实现自动打印日志

丶灬走出姿态 提交于 2020-10-31 04:40:35
SpringBoot默认使用logbook日志框架。 一、引入架包 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>    <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-aop</artifactId>    </dependency> </dependencies> 二、创建logback-spring.xml <configuration> <!-- %m输出的信息, %p日志级别, %t线程名, %d日期, %c类的全名, %i索引 --> <!-- appender是configuration的子节点,是负责写日志的组件 --> <!-- ConsoleAppender把日志输出到控制台

springboot2.x日志配置记录

吃可爱长大的小学妹 提交于 2020-10-31 01:06:38
springboot日志管理: springboot2.x默认使用commons-logging作为内部日志的输出,日志的实现可以选择Java Util Logging,Log4J2和logback 如果使用starters的话,则默认使用的是logback作为日志输出的实现 为了实现日志框架的统一,我们通常使用SLF4J来记录日志 如果我们使用了spring-boot-starter则slf4j相关的jar包就已经引入到系统我们可以直接使用 private static final Logger logger = LoggerFactory.getLogger(Test.class); 或者引入lombok <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> 通过在类名上增加注解@SLF4J来使用; 日志输出格式化配置: 2019-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52

springboot整合elasticsearch时,slf4j版本冲突

*爱你&永不变心* 提交于 2020-10-29 05:09:00
使用springboot整合elasticsearch时,自带的logback和其他jar自身引入的slf4j-simple产生了冲突 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/Program%20Files/maven/repository/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/D:/Program%20Files/maven/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl

java应用线上诊断神器--Arthas

…衆ロ難τιáo~ 提交于 2020-10-28 12:24:14
前言 1、什么是Arthas? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱(截止2020.9.19 github star是23K)。通过Arthas我们可以在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 2、Arthas有哪些特性 实时查看系统的运行状况 查看函数调用的参数,返回值和异常 代码在线热更新 秒解类冲突问题,定位类加载路径 快速定位应用的热点,生成火焰图 在线诊断,点开网页诊断线上应用 3、Arthas能帮我们解决什么问题 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 4、安装 下载arthas-boot.jar,然后用java -jar的方式启动: curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar

正确的打日志姿势

自作多情 提交于 2020-10-28 04:25:27
阅读文本大概需要3分钟。 使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式: logger.debug( "Processing trade with id:[{}] and symbol : [{}] " , id, symbol); 对于debug日志,必须判断是否为debug级别后,才进行使用: if (logger.isDebugEnabled()) { logger.debug( "Processing trade with id: " +id + " symbol: " + symbol); } 不要进行字符串拼接,那样会产生很多String对象,占用空间,影响性能。 反例( 不要这么做 ): logger.debug( "Processing trade with id: " + id + " symbol: " + symbol)

给日志打标签,让你的日志定位再无困难

坚强是说给别人听的谎言 提交于 2020-10-23 21:32:49
背景 不知道各位在生产日志中定位问题时有没有碰到这样的场景:由于coding的时候日志输出的比较少,出现问题时,很难通过日志去定位到问题。又或者是,你明明coding的时候有输出日志。但是在庞大的日志文件中,由于业务线程并发比较多,你输出的日志又没有加关键信息。你也很难定位到你所需要的日志信息。 之前在公司里写业务代码时,为了使每个RPC调用能被日志记录下来,我们在公司基础组件里定义了一个切面,拦截所有的RPC调用,方法开始之前,在日志里输出调用的服务和方法以及参数,方法结束时输出方法的耗时。我相信很多人也是这么做的。 这样一来 ,所有的调用都能通过参数里的关键信息被搜索到。也能定位到调用是什么结束的以及耗时。 但是在有些业务方法中,也打上了很多的业务日志。由于核心业务的tps和qps很高,日志是互相穿插的。如果你的日志没有打上关键的业务信息(比如订单号,业务ID),那就很难在日志中被定位出来。 也许有些童鞋会说,用线程号呀。通过搜索业务ID定位到调用开始的地方,再搜索这条线程的线程号,就可以定位整个请求的所有日志。其实之前我也是这么干的,但是线程一般都是由线程池进行管理的,在tps很高的业务中,同一个线程号有可能短时间会出现多次,但是却是不同的请求。而且业务方法中可能也会有异步线程,导致了线程号会变。这样对于定位日志就又增加了难度。当然最后可以通过对时间戳的分析

springboot通过Aop面向切面实现彩色日志

两盒软妹~` 提交于 2020-10-22 17:48:11
通过springboot的Aop面向切面实现彩色日志使用的场景 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 在项目中我们脱离不开保留用户访问的相关信息,那么下文我们来一起实现springboot通过Aop面向切面实现彩色日志。 我们在项目的resources文件夹下新建一个日志的配置文件命名为logback.xml logback.xml彩色日志是每天保留不同等级日志以及会记录实时日志内容,同时会将保存的内容打印在控制台,日志保留的有效期是15天,可自行配置,超过设置的天数会自动删除16天前的日志文件,其次保存的位置也可以自行配置 < ? xml version = "1.0" encoding = "UTF-8" ? > < ! -- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -- > < ! -- scan : 当此属性设置为 true 时,配置文件如果发生改变