java日志框架 (二) 日志框架使用 之 SLF4J + logback
外文博客写的Demo非常不错!值的一看
https://www.javacodegeeks.com/2012/04/using-slf4j-with-logback-tutorial.html
官方网站
slf4j下载地址:https://www.slf4j.org/download.html
logback下载地址:https://logback.qos.ch/download.html
文件日志、数据库日志!使用
第一步:在maven项目中,在 pom.xml 添加 slf4j-ap、logback-classic、lombak 依赖。
因为写的是Demo只需要三个依赖即可,另外socpe去除,使用默认。
<!--slf4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!--logback-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
如果有下面的报错信息,等。相似信息。请打开日志信息中的链接,阅读,对应自己解决。
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
官网,解析:https://www.slf4j.org/codes.html
Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.
第二步:Logback配置文件,常用的默认方法:classpath中创建logback.xml文件。[即Resources目录下]
官方对配置文件加载的解说: https://logback.qos.ch/manual/configuration.html
logback-test.xml > logback.groovy > logback.xml > 没有配置文件时》
automatically using the BasicConfigurator which will cause logging output to be directed to the console.
官方提供: log4j.properties to logback.xml Translator https://logback.qos.ch/translator/
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="60 seconds">
<property name="LOG_DIR" value="logs"/>
<property name="APP_DIR" value="springmvc"/>
<!-- 1. 控制台输出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!--2. 按照每天生成日志文件-->
<appender name="A1" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_DIR}/${APP_DIR}/log_test.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_PATH}/${APP_DIR}/bak/log-test-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxHistory>10</maxHistory>
<MaxFileSize>50MB</MaxFileSize>
</rollingPolicy>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="A2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_DIR}/${APP_DIR}/log_dao.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_PATH}/${APP_DIR}/bak/log-dao-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxHistory>10</maxHistory>
<MaxFileSize>50MB</MaxFileSize>
</rollingPolicy>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="com.evhtech.test" additivity="false" level="INFO">
<appender-ref ref="A1"/>
</logger>
<logger name="com.evhtech.dao" additivity="false" level="INFO">
<appender-ref ref="A2"/>
</logger>
<logger name="org.apache.catalina.startup.VersionLoggerListener" level="INFO"/>
<logger name="org.apache.coyote" level="INFO"/>
<logger name="org.springframework" level="INFO"/>
<logger name="org.springframework.http" level="INFO"/>
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.junit" level="INFO"/>
<!-- 日志输出级别 -->
<root level="debug">
<appender-ref ref="stdout"/>
</root>
</configuration>
第三步:IDEA 确定要安装Lombok插件。
按 Ctrl + Alt + S 键,在弹出的窗口
第四步:创建将使用slf4j的类。在com.lordofthejars.bar上创建名为BarComponent的第一个类:
一个类:
package com.evhtech.dao;
package com.evhtech.dao;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Dao {
public static void main(String[] args) {
log.trace("Dao log --->TRACE");
log.debug("Dao log --->EBUG");
log.info("Dao log --->INFO");
log.warn("Dao log --->WARN");
log.error("Dao log --->ERROR");
}
}
二个类
package com.evhtech.test;
package com.evhtech.test;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Test {
public static void main(String[] args) {
log.trace("Test log --->TRACE");
log.debug("Test log --->EBUG");
log.info("Test log --->INFO");
log.warn("Test log --->WARN");
log.error("Test log --->ERROR");
}
}
第五步:日志,console输出
新建的二个类。都是用来测试的。是main函数,分析 run 就可以。
第六步:生成的日志文件,在项目目录下。