Lombok @Slf4j 使用和配置
Lombok项目是一个Java库,会自动插入编辑器和构建工具中,从而为您的Java增光添彩。永远不要再写另一个getter或equals方法,带有一个注释的您的类有一个功能全面的生成器,自动化您的日志记录变量等等。理解一下,使用Lombok,通过注解类,让你不再需要编写getter、equals等方法,减少样板代码的编写。
Lombok
官方介绍:Lombok项目是一个Java库,会自动插入编辑器和构建工具中,从而为您的Java增光添彩。永远不要再写另一个getter或equals方法,带有一个注释的您的类有一个功能全面的生成器,自动化您的日志记录变量等等。理解一下,使用Lombok,通过注解类,让你不再需要编写getter、equals等方法,减少样板代码的编写。
@Slf4j
也可以叫:沙拉否J。SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
Logback
logback 用于日志记录,可以将日志输出到控制台、文件、数据库和邮件等,相比其它所有的日志系统,logback 更快并且更小,包含了许多独特并且有用的特性。
logback 被分成三个不同的模块:logback-core,logback-classic,logback-access。
logback-core: 是其它两个模块的基础。logback-classic: 模块可以看作是 log4j 的一个优化版本,它天然的支持 SLF4J。logback-access: 提供了 http 访问日志的功能,可以与 Servlet 容器进行整合,例如:Tomcat、Jetty。
- pom依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
resources下logback.xml配置,也可通过application.properties进行日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/datalog/logs"/>
<!--<property name="LOG_HOME" value="H:\logs"/>-->
<property name="LOG_NAME" value="testservice"/>
<!-- Logback最简洁spring boot默认推荐使用-->
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<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}}"/>
<property name="FILE_LOG_PATTERN"
value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n"/>
<!-- 控制台彩色日志输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- <charset>utf8</charset>-->
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/${LOG_NAME}.log</File><!--不指定会出现Linux无法输出文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<FileNamePattern>${LOG_HOME}/${LOG_NAME}.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>200MB</maxFileSize>
<maxHistory>3</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="org.apache" level="INFO"/>
<logger name="httpclient" level="INFO"/>
<logger name="sun.rmi" level="INFO"/>
<logger name="javax.management" level="INFO"/>
<logger name="org.springframework.beans" level="INFO"/>
<!--<logger name="org.springframework.jdbc" level="DEBUG"/>-->
<logger name="org.springframework.core" level="INFO"/>
<logger name="org.springframework" level="INFO"/>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
再贴一个群友发的配置文件,这个更详细,springboot使用的话也可以叫:logback-spring.xml
logback.xml一般用于非Spring Boot项目,logback-spring.xml用于Spring Boot项目;logback-spring.xml 只有在Spring应用程序运行的时候才生效,即带有@SpringBootApplication注解的类启动的时候才会生效。目前主流框架当然还属:Spring
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1000 seconds">
<springProperty scope="context" name="spring.application.name" source="spring.application.name" defaultValue="app"/>
<timestamp key="date" datePattern="yyyyMMdd"/>
<property name="colorfulPattern"
value="%blue(%d{MM-dd HH:mm:ss}) [%boldYellow(%thread)] | %highlight(%-5level) | %boldGreen(%logger) %X{clientIp} %X{operateId} - %highlight(%msg) %n"/>
<property name="defaultPattern"
value="%d{MM-dd HH:mm:ss} [%thread] | %-5level | %logger %X{clientIp} %X{operateId} - %msg %n"/>
<property name="log.base_path" value="logs"/>
<!-- 日志文件大小,超过这个大小将被压缩 -->
<property name="log.max.size" value="100MB"/>
<!--控制台输出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${colorfulPattern}</pattern>
<!-- <pattern>${defaultPattern}</pattern>-->
</encoder>
</appender>
<appender name="trace.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base_path}/${spring.application.name}/trace.${spring.application.name}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${log.base_path}/archive/${spring.application.name}/trace.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${defaultPattern}</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="info.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base_path}/${spring.application.name}/info.${spring.application.name}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${log.base_path}/archive/${spring.application.name}/info.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${defaultPattern}</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="debug.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base_path}/${spring.application.name}/debug.${spring.application.name}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${log.base_path}/archive/${spring.application.name}/debug.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${defaultPattern}</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="error.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base_path}/${spring.application.name}/error.${spring.application.name}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${log.base_path}/archive/${spring.application.name}/error.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${defaultPattern}</pattern>
</layout>
<!-- 下面为配置只输出error级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<!-- 添加附加的appender,最多只能添加一个 -->
<appender name="trace.async" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<includeCallerData>true</includeCallerData>
<appender-ref ref="trace.appender"/>
</appender>
<!-- http rest 请求日志 -->
<logger name="cn.felord.common.http.RestBodyAdvice" level="TRACE"/>
<logger name="cn.felord.app.mapper" level="DEBUG"/>
<!-- dev 环境调试 -->
<springProfile name="dev">
<logger name="org.springframework.security" level="TRACE" additivity="false" >
<appender-ref ref="stdout"/>
</logger>
<logger name="org.springframework.security.oauth2" level="DEBUG" additivity="false" >
<appender-ref ref="stdout"/>
</logger>
<logger name="org.springframework.web" level="TRACE" additivity="false" >
<appender-ref ref="stdout"/>
</logger>
</springProfile>
<root level="info">
<appender-ref ref="stdout"/>
<appender-ref ref="info.appender"/>
<appender-ref ref="debug.appender"/>
<appender-ref ref="error.appender"/>
<appender-ref ref="trace.async"/>
</root>
</configuration>
- 在需要使用日志的类上加@Slf4j 注解
log.info(“logindata:–》{}–》{}–》{}”, “111”, “222”, “333”);
更多推荐


所有评论(0)