1、SLF4J(Simple logging Facade for Java)
slf4j 供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,所以还需一个日志框架将最终日志名称,路径,日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能。
2、logback
logback的整体性能比log4j较佳,而且原生实现slf4j接口。
在resource路径下新建
依赖jar包
<property name="LOG_HOME" value="/data/log/bcp"/> //日志路径 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%date] [%-5level] [%class] - [%msg]%n</pattern> </encoder> //日志输出格式 </appender> <appender name="ALLFILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/test.log</file> //日志名称 <append>true</append> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/demo.%d{yyyy-MM-dd}.%i.log</fileNamePattern> //日志保存最大文件后命名规则 <maxHistory>2</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>[%date] [%-5level] [%logger] - [%msg]%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="ERROFILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/error.log</file> <append>true</append> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>7</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>[%date] [%-5level] [%logger] - [%msg]%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- logger主要用于存放日志对象,也可以定义日志类型、级别 name:表示匹配的logger类型前缀,也就是包的前半部分 level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出, false:表示只用当前logger的appender-ref, true:表示当前logger的appender-ref和rootLogger的appender-ref都有效 --> <logger name="test" level="debug" /> <!-- Spring framework logger --> <logger name="org.springframework" level="info"></logger> <logger name="org.spring.springboot.dao" level="debug"/> <logger name="com.apache.ibatis" level="DEBUG"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <root level="INFO"> <!--<appender-ref ref="STDOUT"/>--> <appender-ref ref="ALLFILE"/> <appender-ref ref="ERROFILE"/> </root>
3、代码引用
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
/** * 记录日志 */ private Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info("tt: add= {}", JSON.toJSONString(test));