SpringBoot-日志简介以及Log4j 1.x 版本

一、日志的作用

开发调试:开发过程中,进行逻辑跟踪、结果查看

问题排查:辅助排查和定位线上问题,优化程序运行性能

状态监控:监控系统的运行状态、检测非授权的操作

数据分析:日志中包含大量的用户数据,包含点击行为,兴趣偏好等,对公司下一步战略方向有一定的指导作用

二、Java日志处理的发展史

  • 最原始:System.out、System.err
  • JUL(Java Util Logging):JDK自带的日志框架,在java.util.logging包下,API不完善、对开发者不友好,很少人使用
  • Log4j(Log For Java) :由Apache组织推出。1.x版本于2015年8月5日宣布停止维护
  • JCL(Jakarta Commons Logging):由Apache组织推出的日志门面接口,提供一套API来实现不同Logger之间的切换
  • SLF4J(Simple Logging Facade For Java):由Log4j作者开发的日志门面接口,比JCL更优秀更好用
  • Logback:由Log4j作者开发,比Log4j 1.x性能高很多,实现了SLF4J
  • Log4j2:由Apache组织推出的,Log4j 1.x的重大升级改进版,改进了Logback的一些问题,既是门面接口,又是日志实现

三、门面接口和日志实现

  • 门面接口:JCL、SLF4J、Log4j2
  • 日志实现:JUL、Log4j 1.x、Logback、Log4j2

四、日志的几大实现方式

  1. Log4j 1.x (实现) 
  2. JCL(门面) + Log4j 1.x(实现)
  3. SLF4J(门面)
    1. Log4j 1.x(实现)
    2. Logback(实现) + SpringBoot
    3. Log4j 2.x(实现)+ SpingBoot
  4. Log4j 2.x(门面)+ Log4j 2.x(实现)

1、 Log4j 1.x (实现) 

配置如下:

  • 配置文件中properties中的配置如下:
# 全局配置
#log4j.rootLogger=TRACE, console

# 定义子Logger
log4j.logger.com.mj.main=WARN, console

log4j.logger.com.mj.test=ERROR, console1
# 子log的会继承父log的,导致结果会打印两遍
log4j.logger.com.mj.test.TestLog4j1_03=ERROR, console
# 子log不再继承父log
log4j.additivity.com.mj.test.TestLog4j1_03=false

# Appender:输出目标(比如控制台、文件)
# log4j.appender.名称=Appender的类型
log4j.appender.console=org.apache.log4j.ConsoleAppender
# Layout: 输出格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.encoding=UTF-8
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t]: %m%n

# 格式变化
log4j.appender.console1=org.apache.log4j.ConsoleAppender
log4j.appender.console1.layout=org.apache.log4j.PatternLayout
log4j.appender.console1.layout.conversionPattern=%d{HH:mm:ss.SSS} [%-5p] [%t]: %m%n

# Layout: 输出格式 以xml的格式输出
log4j.appender.console2=org.apache.log4j.ConsoleAppender
log4j.appender.console2.layout=org.apache.log4j.xml.XMLLayout

# Layout: 输出格式 以html的格式输出
log4j.appender.console3=org.apache.log4j.ConsoleAppender
log4j.appender.console3.layout=org.apache.log4j.HTMLLayout

 测试类如下:

package com.mj;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

public class TestLog4j1 {
    public static void main(String[] args) {
        Logger logger = LogManager.getLogger(TestLog4j1.class);
        logger.fatal("致命_FATAL");
        logger.error("致命_ERROR");
        logger.warn("致命_WARN");
        logger.info("致命_INFO");
        logger.debug("致命_DEBUG");
        logger.trace("致命_TRACE");
    }
}

控制台打印如下:

 文件输出如下:

# 全局配置
encoding=UTF-8
pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%t]: %m%n

log4j.rootLogger=TRACE, dailyRollingFile

# 输出到滚动文件(DailyRollingFileAppender)
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.file=log4j.log
#每分钟的日志放在一个文件
log4j.appender.dailyRollingFile.datePattern='.'yyyy-MM-dd-HH-mm 
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.encoding=${encoding}
log4j.appender.dailyRollingFile.layout.conversionPattern=${pattern}


# 输出到滚动文件(RollingFileAppender)
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
# 最多10个文件
log4j.appender.rollingFile.maxBackupIndex=10
log4j.appender.rollingFile.maxFileSize=5KB
log4j.appender.rollingFile.file=log4j.log
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.encoding=${encoding}
log4j.appender.rollingFile.layout.conversionPattern=${pattern}


# 输出文件(FileAppender)
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.file=log4j.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.encoding=${encoding}
log4j.appender.file.layout.conversionPattern=${pattern}


# Appender:输出目标(比如控制台、文件)
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.encoding=${encoding}
log4j.appender.console.layout.conversionPattern=${pattern}

 同样这些配置也可以配置在log4.xml中如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration>

    <!--log4j.appender.console-->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="conversionPattern" value="%d{HH:mm:ss.SSS} [%-5p] %c: %m%n "/>
        </layout>
    </appender>

    <!--log4j.appender.file-->
    <appender name="file" class="org.apache.log4j.FileAppender">
        <param name="file" value="log4j.log"/>
        <param name="encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="conversionPattern" value="%d{HH:mm:ss.SSS} [%-5p] %c: %m%n "/>
        </layout>
    </appender>


    <!--log4j.appender.rollingFile-->
    <appender name="rollingFile" class="org.apache.log4j.RollingFileAppender">
        <param name="maxFileSize" value="10KB"/>
        <param name="maxBackupIndex" value="10"/>
        <param name="file" value="log4j.log"/>
        <param name="encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="conversionPattern" value="%d{HH:mm:ss.SSS} [%-5p] %c: %m%n "/>
        </layout>
    </appender>


    <!--log4j.appender.dailyRollingFile-->
    <appender name="dailyRollingFile" class="org.apache.log4j.DailyRollingFileAppender">
       <param name="datePattern" value="'.'yyyy-MM-dd-HH-mm-ss"/>
        <param name="file" value="log4j.log"/>
        <param name="encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="conversionPattern" value="%d{HH:mm:ss.SSS} [%-5p] %c: %m%n "/>
        </layout>
    </appender>



    <logger name="com.mj.main" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="dailyRollingFile"/>
    </logger>

    <!--logger-->
    <root>
        <level value="TRACE"/>
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

    
</log4j:configuration>

猜你喜欢

转载自blog.csdn.net/weixin_45689945/article/details/127463234