首页 > 其他分享 >日志

日志

时间:2023-11-28 20:48:47浏览次数:33  
标签:xml logging log spring 日志 logback

基于Lombok使用注解@Slf4j将日志信息输出为日志文件

blog.csdn.net成就一亿技术人!

maven项目基于Lombok使用注解@Slf4j将日志信息输出为日志文件

  • maven项目基于Lombok使用注解@Slf4j将打印的日志输出为日志文件
    • 结果与目的
      • 结果
      • 目的
    • 简述
    • 日志等级
    • 配置流程
      • 导入maven依赖
      • 配置文件
      • 新建logback-spring.xml文件
    • 完成配置
    • 结语

maven项目基于Lombok使用注解@Slf4j将打印的日志输出为日志文件

结果与目的

结果

完整配置后项目在启动后,会根据配置文件中设置的文件路径生成四个不同级别的.log文件:info.logwarn.logdebug.logerror.log,除了项目启动当天的日志文件名称没有日期外,在项目持续运行期间,后续日志文件名称会将当天的日期加进去区分具体哪一天的日志

目的

方便快速检测并查看项目中的一些具体BUG信息或者某些需求日志

简述

slf4j(全称是Simple Loging Facade For Java)是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就好像我们经常使用的JDBC一样,只是一种规则…简介及底层实现.

日志等级

slf4j日志级别有五种:ERROR、WARN、INFO、DEBUG、TRACE,级别从高到底
此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录
ALL和DEBUG不建议使用,打印输出的日志过于多

配置流程

导入maven依赖

version

	<properties>
        <lombok.version>1.18.4</lombok.version>
    </properties>

Lombok and slf4j

	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>${lombok.version}</version>
	</dependency>
	<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>

配置文件

application.yml

# 文件的路径和级别已经在logback-spring.xml中设置
logging:
  config: classpath:config/logback-spring.xml
#  path: operation-mysql-logs
#  level.: debug

新建logback-spring.xml文件

yml文件中config路径是classpath:config/logback-spring.xml文件夹下的logback-spring.xml
新建logback-spring.xml完成后需要放在resources目录下新建config目录下

配置文件路径可根据实际自行调整

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
                 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logback-spring</contextName>
 
    <!-- name的值是变量的名称,value的值是变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
    <property name="logging.path" value="具体4个日志文件的父级文件夹名称,自行更改设置" />

    <!--0. 日志格式和颜色渲染 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
 
    <!--1. 输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
 
    <!--2. 输出到文档-->
    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${logging.path}/debug.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${logging.path}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${logging.path}/info.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${logging.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${logging.path}/warn.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logging.path}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${logging.path}/error.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logging.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 4. 最终的策略 -->
    <!-- 4.1 开发环境:打印控制台-->
    <springProfile name="dev">
        <logger name="此位置填写自己的项目中全mapper\dao路径,用于在开发环境时将sql语句打印在控制台" level="debug"/><!-- 修改此处扫描包名 -->
    </springProfile>
 
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="DEBUG_FILE" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="WARN_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>
 
    <!-- 4.2 生产环境:输出到文档 -->
    <springProfile name="pro">
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="WARN_FILE" />
        </root>
    </springProfile>
</configuration>

    

注:
1:xml文件中<maxFileSize>日志文件大小<maxHistory>日志文件保留天数可根据实际情况按级别进行单独修改
2:文件中<property>中value属性和<springProfile name="dev"><logger>name属性,需要根据自己项目实际情况修改
3:如果更改logback-spring.xml的文件名称,在文件中<contextName>logback-spring</contextName>logback-spring需要与文件名称对应

配置文件中其他属性的具体意思请查看文件中对应的注释内容

完成配置

使用框架:SSM
启动项目即可,有问题的可以留言一起研究
说明:Lombok的注解@Slf4j只是负责提供打印日志信息的一种注解方式,真正具体的日志实现方案是org.apache.log4j.Logger类

结语

2021年6月29日 13:33:23 记录于 CSDN

跳转到 Cubox 查看

标签:xml,logging,log,spring,日志,logback
From: https://www.cnblogs.com/ko25891wan/p/17863005.html

相关文章

  • 日志错位读写的问题
    在对象销毁的时候需要记得销毁句柄:classNgLogger:def__init__(self,module,file_name):self.logger=logging.getLogger(module)self.logger.setLevel(logging.DEBUG)self._fh=logging.FileHandler(file_name)self._fh.setLeve......
  • Linux学习日志
    Linux学习日志环境安装安装软件一般有三种方式:rpm解压缩yum在线安装1、JDK安装我们开发java程序必须要的环境!1、下载JDKrpm。2、安装java环境#检测当前系统是否存在java环境!java-version#如果有的话就需要卸载#rpm-qa|grepjdk#检测JDK版本信息#rpm-e--n......
  • 提升企业网络安全的得力助手——EventLog Analyzer网络日志管理
    在当今数字化时代,企业的网络安全问题变得尤为重要。为了更好地应对日益增多的威胁和安全漏洞,企业需要一种高效的网络日志管理工具,EventLogAnalyzer便是其中一款卓越的解决方案。EventLogAnalyzerEventLogAnalyzer是一款综合性的网络日志管理工具,专为企业而设计,以提供全方位的日......
  • 【linux日常】---mongdb日志切割
    前提操作导入包管理系统使用的公钥从终端发出以下命令以从https://www.mongodb.org/static/pgp/server-4.4.asc导入MongoDB公共GPG密钥:wget-qO-https://www.mongodb.org/static/pgp/server-4.4.asc|sudoapt-keyadd-返回的应是ok但是,如果您收到指示gnupg未安装......
  • Spring Boot项目请求日志打印
    SpringBoot项目请求日志打印接口请求日志打印效果如图,基本符合中小型项目所需直接上代码本代码中使用了hutool的工具包,需要先导入依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><vers......
  • Linux重要的日志文件
    1、/var/log/boot.log该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息2、/var/log/syslog只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件3、/var/log/wtmp该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件4、/var/ru......
  • 剖析Spring Boot 日志框架
    刨析SpringBoot的日志框架声明原文章地址:[剖析SpringBoot日志框架-知乎(zhihu.com)](https://zhuanlan.zhihu.com/p/357053546#:~:text=1logback-classic实现了slf4j。说明SpringBoot采用的是slf4j,3jul-to-slf4j和log4j-to-slf4j类似,实现jul日志重定向到......
  • 编译log4cxx日志库
    环境:windows10,vs2019,x64注意事项1.该目录保存log4cxx编译后的h、dll等文件2.LOG4CXX_SOURCE_DIR变量未定义,需要在cmake时手动定义,路径为项目根目录3.CMAKE_INSTALL_PREFIX需要自定义4.logging-log4cxx\src\cmake\compiler-features\check-compiler-support.cmake该文件有......
  • .net core下优秀的日志框架使用解析,附源代码
    在.NETCore中,日志是一个非常重要的组件,它可以帮助我们记录应用程序的运行情况,以便在出现问题时进行排查。在本文中,我们将介绍五个优秀的.NETCore日志框架,它们分别是Serilog、NLog、Log4Net、Microsoft.Extensions.Logging和Loupe。我们将为每个框架提供使用方法及步骤,并......
  • windows定时备份日志文件
    前言之前项目因为各种原因没有上CI/CD,也没有部署什么nginx管理工具,再加上nginx部署在windowsserver上,,面对日积月累不停膨胀的日志文件,需要一个定时脚本处理自动分割日志文件。本篇文章主要讲解如何在windows上创建定时任务,以及如何编写一个简单的bat脚本Windows备......