java日志框架介绍、demo演示、加载过程、标签详解

日志整理

分享思路

  • 日志前言
  • 日志框架的简单介绍
  • 日志级别
  • 日志demo整合
  • springboot的日志加载过程
  • slf4j的加载过程
  • Log4j2的标签详解

日志前言

  1. 什么是日志 ?
    日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分。
  2. 日志的作用 ?
      好的日志可以帮助我们:了解线上系统的运行状态;快速准确定位线上问题;发现系统瓶颈;预警系统潜在风险;挖掘产品最大价值……
      不好的日志导致:对系统的运行状态一知半解;系统出现问题无法定位,或需要花费巨大的时间和精力;无法发现系统瓶颈;不知优化从何做起;无法对错误进行监控和报警;对挖掘用户行为和提升产品价值毫无帮助……
  3. 日志分类
    日志从功能来说,可分为诊断日志统计日志审计日志
  • 诊断日志
    3.1.1 请求的入口出口
    3.1.2 服务调用和返回
    3.1.3 资源消耗操作
    3.1.4 容错行为
    3.1.5 程序异常
    3.1.6 后台操作
    3.1.7 启动关闭、配置加载
  • 统计日志
    3.2.1用户统计访问
    3.2.2计费日志
  • 审计日志
    3.3.1按照指定格式输出日志
    3.3.2按照需求输出日志

    注意:日志我们需要记录我们正好需要的日志信息,尽量避免繁杂无用的日志信息出现

日志框架的简单介绍

目前在在市场上目前的日志框架有:JCL(Jakarta Commons Logging)、JUL(Java util Logging)、Jboss-LoggingSLF4JLog4jLogbackLog4j2

日志门面框架JCLSLF4J
日志实现框架JULLog4JLogbackLog4j2

Remember a person and an institution:
Ceki Gulcu -->SLF4J、Log4J、Logback
Apache -->JCL、Log4J2

  • JCL:采用适配器模式,是Java自身的一些包用了JUL,提供一套API来实现不同Logger之间的切换。JCL致命的缺点就是算法复杂,出现问题难以排除。
  • SLF4J:简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。解决了JCL的缺点。
  • JUL:是JDK 中自带的log功能,JDK1.4 才开始加入(2002年),但使用不够广泛。早期存在性能问题,到JDK1.5上才有了不错的进步,与Logback/Log4j2相比还是有所不如的。
  • Log4J:2001年由Ceki Gulcu发布,在2014年12月发行了最后一版。springboot从1.4版本之后不再支持。短板在于它的性能问题。
  • Logback:与Log4j相比,Logback重新了内核,使它的性能提升了很多,大约是Log4j的10倍,同时占用更小的内存,并且完整的实现了SLF4J API是你可以很方便的切换日志框架。
  • Log4j2:Log4j的升级版本,比Log4j 1.x有重大改进,修复了Logback中一些问题。但是不兼容Log1.x版本。Log4J2是现在最优秀的Java日志框架是Log4j2,没有之一。根据官方的测试表明,在多线程环境下,Log4j2的异步日志表现更加优秀。在异步日志中,Log4j2使用独立的线程去执行I/O操作,可以极大地提升应用程序的性能。

Logback和Log4J2性能对比

当线程数量较少时:Logback和Log4j2的性能相差无几
当线程数量较大时,很明显Log4j2的性能要10倍于Logback。Log4j2在独立应用程序中基本是无垃圾的,在web项目中是低垃圾的,减少了GC的内存消耗。
在这里插入图片描述

springboot集成slf4j抽象日志框架

  • 导入springboot启动依赖
    启动依赖
  • 写测试类进行原生slf4j抽象日志框架的日志打印
    main方法测试
    日志打印结果:
    console打印结果

springboot集成log4j2日志框架

  • 导入依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<!-- 排除掉SpringBoot的默认log配置 -->
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!--log4j2启动类-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency> 
  • xml的配置
    注意:springboot的加载顺序是会先去默认查找classes目录下是否存在log4j2.properties、log4j2.xml。如果存在,springboot便会直接使用该文件中的配置进行日志打印;如果不存在,会变回去springboot工程的配置文件application.properties中根据相关配置去匹配对象的日志配置文件。
 private String[] getCurrentlySupportedConfigLocations() {
   
        List<String> supportedConfigLocations = new ArrayList();
        supportedConfigLocations.add("log4j2.properties");
        if (this.isClassAvailable("com.fasterxml.jackson.dataformat.yaml.YAMLParser")) {
   
            Collections.addAll(supportedConfigLocations, new String[]{
   "log4j2.yaml", "log4j2.yml"});
        }

        if (this.isClassAvailable("com.fasterxml.jackson.databind.ObjectMapper")) {
   
            Collections.addAll(supportedConfigLocations, new String[]{
   "log4j2.json", "log4j2.jsn"});
        }

        supportedConfigLocations.add("log4j2.xml");
        return StringUtils.toStringArray(supportedConfigLocations);
    }
  • 配置log4j2.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
   <Properties>
       <property name="LOG_INFO_STYLE" value="[time:] %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
       <Property name="logFilePath">D:/logs</Property>
       <Property name="logFileName">loggerTest</Property>
   </Properties>
   <appenders>
       <console name="Console" target="SYSTEM_OUT">
           <PatternLayout pattern="${LOG_INFO_STYLE}"/>
       </console>
       <RollingFile name="RollingFileInfo"
                    fileName="${logFilePath}/${logFileName}.log"
                    filePattern="${logFilePath}/${logFileName}_%d{yyyy-MM-dd}/${logFileName}.log">
           <PatternLayout pattern="${LOG_INFO_STYLE}"/>
           <Policies>
               <TimeBasedTriggeringPolicy interval="1"/>
               <SizeBasedTriggeringPolicy size="10 MB"/>
           </Policies>
           <DefaultRolloverStrategy max="20"/>
       </RollingFile>
   </appenders>
   <loggers>
       <logger name="org.springframework" level="INFO"></logger>
       <logger name="org.mybatis" level</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值