博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6.日志的使用
阅读量:6692 次
发布时间:2019-06-25

本文共 4335 字,大约阅读时间需要 14 分钟。

 

一、SLF4j使用

1、在系统中使用SLF4J

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法; 

给系统里面导入slf4j的jar和 logback的实现jar就可以。

  • 1 import org.slf4j.Logger;2 import org.slf4j.LoggerFactory;3 public class HelloWorld {4 public static void main(String[] args) {5     Logger logger = LoggerFactory.getLogger(HelloWorld.class);6     logger.info("Hello World");7     }8 }

     SLFJ官网 中介绍

      图1

        

        图2

        

 

 

2、遗留问题

Spring Boot(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx 

统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出

        图3

        

        图4

        

 

如何让系统中所有的日志都统一到slf4j

  1、将系统中其他日志框架先排除出去; 

  2、用中间包来替换原有的日志框架; 
  3、我们导入slf4j其他的实现

 

 

 

查看maven的jar包依赖的2种方式

方式一

 

方式二

  pom文件中右键

 或是:

 

 

 

3、springboot日志关系
  • org.springframework.boot
    spring‐boot‐starter‐logging

 

底层依赖关系

 

总结:

  1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录

  2)、SpringBoot也把其他的框架的日志都替换成了slf4j;

  3)、如果我们要引入其他框架?

    

@SuppressWarnings("rawtypes") public abstract class LogFactory {          static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J =        "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";   static LogFactory logFactory = new SLF4JLogFactory();   ...... }

    

 

  4)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉

      Spring框架用的是commons-logging;

  • org.springframework
    spring-core
    commons-logging
    commons-logging

    SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可

 

4、日志使用

springboot默认帮我们做好了日志的配置,我们可以直接使用即可

//记录器    Logger logger = LoggerFactory.getLogger(getClass());    @Test    public void contextLoads() {        //System.out.println();        //日志的级别;        //由低到高   trace

 

在配置文件中选log级别时,会自动提示要配置级别的包名,可根据不同的包名指定不同的级别。

 

日志输出格式: 

%d:表示日期时间, %thread:表示线程名, %‐5level:级别从左显示5个字符宽度 %logger{
50}: 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息, %n:是换行符 总的:%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{
50} ‐ %msg%n

 

虽然有默认的配置,但是我们常常还是需要自己配置的

logging.level.com.atguigu=trace #目录,/在windows中被视为C盘根目录,默认生成名为spring.log的文件#logging.path=/log# 不指定路径只指定文件名则在当前项目下生成
# 可以指定完整的路径;#logging.file=G:/springboot.log # 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件logging.path=/spring/log# 在控制台输出的日志的格式logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n# 指定文件中日志输出的格式logging.pattern.file=%d{yyyy‐MM‐dd} === [%thread] === %‐5level === %logger{50} ==== %msg%n #当logging.file 和logging.path同时指定时,logging.file生效,logging.path不生效

 

 logback默认设置

 

 

 

 不同的日志系统的默认配置文件名称,将其放在配置文件路径下即可生效

logback.xml:直接就被日志框架识别了;

logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot 的高级Profile功能

 

 

如:

%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n
%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n

 

 

官方doc文档描述

 

  如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误

  no applicable action for [springProfile]

 

 

指定配置总结:

给类路径下放上每个日志框架自己的配置文件即可;SpringBoot就不使用他默认配置的了

 

 


 

5.切换log框架

弃用SpringBoot官方指定的logback日志框架,改用别的日志框架实现。但没太大实际意义,因为logback是最先进的版本,一般没有必要替换。

 

 1.去调logback jar包及其依赖(SpringBoot 2.1.0版本)

 

2.去掉连结slf4j和logback的适配层中间jar包 log4j-toslf4j

 

 

 3.加入slf4j官网中指定的log4j和slf4j的中间转换依赖jar包

org.slf4j
slf4j-log4j12
1.7.21

 

 4.重新启动SpringBoot项目

 

 5.配置log4j默认的日志文件log4j.properties到配置文件目录下

### 设置###log4j.rootLogger = debug,stdout,D,E### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [hello world ===== %-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

 

 

 

 


 

6.直接替换logg-starter 

 

 引入替换的依赖

org.springframework.boot
spring-boot-starter-log4j2

 

 查看新替换进来的依赖(注:不同版本的SpringBoot的结果不一样

 

 

 

SpringBoot默认是支持log4j2的

 

 

转载于:https://www.cnblogs.com/guchunchao/p/9889398.html

你可能感兴趣的文章
iOS 的 NSNotificationCenter 中哪些通知由系统自动发送?
查看>>
Android性能优化,Startalk会话页GIF内存优化实践
查看>>
mac 写php时出现问题: Warning: Cannot modify header information - headers already
查看>>
TCP IP之路由算法
查看>>
服务器与客户端的实时通信
查看>>
NEO改进协议提案4(NEP-4)
查看>>
3天破9亿!上万条评论解读《西虹市首富》是否值得一看
查看>>
ASP.NET Core 应用发布与部署指南
查看>>
【跃迁之路】【557天】程序员高效学习方法论探索系列(实验阶段314-2018.08.16)...
查看>>
【PHP7源码分析】PHP7语言的执行原理
查看>>
01 【零基础入门】html学习笔记(2)
查看>>
一名非典型二流学生的自述 | 我是如何从菜鸟进化到辣鸡的
查看>>
浅析MySQL语句优化中的explain参数
查看>>
JS 对象
查看>>
使用 Optional Chaining 做数据防御
查看>>
JSONP技术栈
查看>>
vscode 调试node之npm与nodemon
查看>>
laravel利用Redis来实现网站缓存读取
查看>>
大师带你开悟高薪程序员之路——《编程之道》番外篇
查看>>
iOS开发系列--代码混淆
查看>>