Hefery 的个人网站

Hefery's Personal Website

Contact:hefery@126.com
  menu
73 文章
0 浏览
0 当前访客
ღゝ◡╹)ノ❤️

日志记录—SLF4J

Java日志

image.png

日志简介

日志级别

日志级别等级说明
OFF关闭不输出日志
FATAL致命输出非常严重的可能会导致应用程序终止的错误
ERROR错误输出错误,但应用还能继续运行
WARN警告输出可能潜在的危险状况
INFO信息输出应用运行过程的详细信息
DEBUG调试输出更细致的对调试应用有用的信息
TRACE跟踪输出更细致的程序运行轨迹
ALL所有输出所有级别信息
log.debug("debug message");
log.warn("warn message");
log.info("info message");
log.error("error message");
log.trace("trace message");

日志优先级别标准顺序为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

日志框架

Log4j

  • 引入依赖

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
  • log4j.properties

    ###配置日志根Logger
    log4j.rootLogger=DEBUG,stdout,D,E,I,file
    #ERROR 为严重错误 主要是程序的错误
    #WARN 为一般警告,比如session丢失
    #INFO 为一般要显示的信息,比如登录登出
    #DEBUG 为程序的调试信息
    log4j.additivity.org.apache=true
    ###配置日志信息输出目的地Appender
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    
    
    
    ### 输出到日志文件 ###
    #org.apache.log4j.ConsoleAppender(控制台)
    #org.apache.log4j.FileAppender(文件)
    #org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    #org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    #org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
    #log4j.appender.error.Target=System.out
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = /data/log/bill.debug.log
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm
    # '.'yyyy-MM:每月
    # '.'yyyy-ww:每周
    # '.'yyyy-MM-dd:每天
    # '.'yyyy-MM-dd-a:每天两次
    # '.'yyyy-MM-dd-HH:每小时
    # '.'yyyy-MM-dd-HH-mm:每分钟
    #log4j.appender.file.MaxFileSize=1MB
    ###滚动文件的最大数
    #log4j.appender.file.MaxBackupIndex=8
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] [ET:%X{ENV_TYPE},AN:%X{APP_NAME},SN:%X{SERVICE_NAME},CN:%X{CONTAINER_NAME},CI:%X{CONTAINER_IP}] %m%n
    log4j.appender.file.Threshold=DEBUG
    ###将消息增加到指定文件中,false指将消息覆盖指定的文件内容
    log4j.appender.file.append=true
    ###日志的保存位置
    #log4j.appender.file.File=E:/logs/file-debug-log.log
    log4j.appender.file.File=E:/logs/debug-debug.log
    ###每天产生一个日志文件
    #log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.maxFileSize=100
    #log4j.appender.file.maxBackupIndex=5
    #log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] [ET:%X{ENV_TYPE},AN:%X{APP_NAME},SN:%X{SERVICE_NAME},CN:%X{CONTAINER_NAME},CI:%X{CONTAINER_IP}] %m%n
    #log4j.appender.file.Threshold=DEBUG
    #log4j.appender.file.append=true
    #log4j.appender.file.File=E:/logs/debug-log.log
    
    
    
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG
    ###配置日志信息的格式(布局)
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #org.apache.log4j.HTMLLayout(以HTML表格形式布局)
    #org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
    #org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
    #org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    ###配置日志打印的格式格式化日志信息
    #%m   输出代码中指定的消息
    #%p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
    #%r   输出自应用启动到输出该log信息耗费的毫秒数
    #%c   输出所属的类目,通常就是所在类的全名
    #%t   输出产生该日志事件的线程名
    #%n   输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
    #%d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS}
    #%l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
    
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n
    
    ### 输出到日志文件 ###
    log4j.appender.I = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.I.File = /data/log/bill.info.log
    log4j.appender.I.Append = true
    log4j.appender.I.Threshold = INFO
    log4j.appender.I.layout = org.apache.log4j.PatternLayout
    log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n
    
    ### 保存异常信息到单独文件 ###
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File = /data/log/bill.error.log
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%
    + `private  final Logger logger = LoggerFactory.getLogger(当前类名.class);`
    + `logger.info("create address info: [{}], [{}]", loginUser.getUserId(), JSON.toJSONString(id));`
    
  • 使用:
    private final Logger logger = LoggerFactory.getLogger(当前类名.class);
    logger.info("create address info: [{}], [{}]", loginUser.getUserId(), JSON.toJSONString(id));

Slf4j

SLF4J:日志门面( Simple Logging Facade for Java SLF4J)作为门面或抽象,用来服务于各种各样的日志框架,比如java.util.logginglogbacklog4j。日志标准,并不是日志系统的具体实现

  • 提供日志接口
  • 提供获取具体日志对象的方法

使用场景:

  • 在 service 或 单元测试类进行日志输出

避免使用:

  • System.out.print
  • e.printStackTrace()
  • 不要使用错误的日志级别
  • 不要在循环中打印日志

需要安装 Lombok 插件

注解
  • 在需要使用的类添加 @Slf4j 注解
  • log.info("create address info: [{}], [{}]", loginUser.getUserId(), JSON.toJSONString(id));
编码
  • private final Logger logger = LoggerFactory.getLogger(当前类名.class);
  • logger.info("create address info: [{}], [{}]", loginUser.getUserId(), JSON.toJSONString(id));

Logback

Logger 可以被分配级别:TRACE、DEBUG、INFO、WARN 和 ERROR

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
 
<configuration scan="true" scanPeriod="60 seconds">
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-M-d HH:mm:ss} %t %p %m%n</pattern>
        </encoder>
    </appender>
    <appender name="springboot"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- <Encoding>UTF-8</Encoding> -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover 保存历史记录到这个文件夹一日起为后缀 -->
            <FileNamePattern>logs/logback/springboot_%d{yyyy-M-d}.log
            </FileNamePattern>
           <!-- keep 10 days' worth of history -->
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-M-d HH:mm:ss} %t %p %m%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
    </appender>
    <appender name="xxx-xsp-basicinfo"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logs/logback/faw_tsp_basicinfo_%d{yyyy-M-d}.log
            </FileNamePattern>
            <MaxHistory>100</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-M-d HH:mm:ss} %t %p %m%n</pattern>
        </encoder>
    </appender>
    <logger name="org.springframework.boot" level="info" additivity="false">
        <appender-ref ref="stdout"/>
        <appender-ref ref="springboot"/>
    </logger>
    <!-- name包必须能够扫描到所有类,包括启动类 -->
    <logger name="com.xxx.xsp.basicinfo" level="info" additivity="false">
        <appender-ref ref="xxx-xsp-basicinfo"/>
        <appender-ref ref="stdout"/>
    </logger>
    <root level="info">
        <appender-ref ref="stdout"/>
        <appender-ref ref="springboot"/>
        <appender-ref ref="xxx-xsp-basicinfo"/>
    </root>
</configuration>  

标题:日志记录—SLF4J
作者:Hefery
地址:http://hefery.icu/articles/2022/04/08/1649399266546.html