slf4j的使用:常规使用、注解、存储到数据库
slf4j的使用,注解@Slf4j的应用,以logback为例将日志写入数据库目录一、应用示例二、注解@Slf4j三、将日志保存至数据库slf4j是外观模式的典型应用。slf4j只是一个日志标准,并不是日志系统的具体实现。slf4j能够提供日志接口,提供获取具体日志对象的方法。slf4j-simple、logback都是slf4j的具体实现,log4j虽然不直接实现slf4j,但是有专门的一层桥接
slf4j是外观模式的典型应用。slf4j只是一个日志标准,并不是日志系统的具体实现。slf4j能够提供日志接口,提供获取具体日志对象的方法。
slf4j-simple、logback都是slf4j的具体实现,log4j虽然不直接实现slf4j,但是有专门的一层桥接slf4j-log412来实现slf4j。
一、应用示例
1、引入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-beta-3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
slf4j-simple、logback应用比较简单,不需要配置,log4j需要进行配置。
<!-- logback依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- slf4j-simple依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
2、测试
@Test
public void test(){
Logger logger = LoggerFactory.getLogger(Object.class);
logger.info("123");
}
打印出:
[main] INFO java.lang.Object - 123
二、注解@Slf4j
使用注解,不需要每次都生成Logger对象。
1、安装lombok依赖
可以在线安装,File->Settings->Plugins->Marketplace,搜索安装即可。下图是已经安装了。
也可以去IDEA的插件网下载。下载后将其解压放到IDEA安装文件的plugins目录下,比如:C: \IntelliJ IDEA 2020.1\plugins,重启IDEA。
2、引入lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
3、使用log进行日志打印
@Slf4j
public class Slf4jTest {
@Test
public void test(){
log.info("123");
}
}
打印出:
[main] INFO com.laosun.test.Slf4jTest – 123
三、将日志保存至数据库
1、添加依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
2、创建数据库logback_test,以及三个表logging_event_property, logging_event_exception, logging_event:
建表的SQL语句在图中位置可以找到
CREATE DATABASE logback_test;
USE logback_test;
BEGIN;
DROP TABLE IF EXISTS logging_event_property;
DROP TABLE IF EXISTS logging_event_exception;
DROP TABLE IF EXISTS logging_event;
COMMIT;
BEGIN;
CREATE TABLE logging_event
(
timestmp BIGINT NOT NULL,
formatted_message TEXT NOT NULL,
logger_name VARCHAR(254) NOT NULL,
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
arg0 VARCHAR(254),
arg1 VARCHAR(254),
arg2 VARCHAR(254),
arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
caller_line CHAR(4) NOT NULL,
event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
COMMIT;
BEGIN;
CREATE TABLE logging_event_property
(
event_id BIGINT NOT NULL,
mapped_key VARCHAR(254) NOT NULL,
mapped_value TEXT,
PRIMARY KEY(event_id, mapped_key),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
BEGIN;
CREATE TABLE logging_event_exception
(
event_id BIGINT NOT NULL,
i SMALLINT NOT NULL,
trace_line VARCHAR(254) NOT NULL,
PRIMARY KEY(event_id, i),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
3、在src/main/resources目录下创建logback.xml和mchange-log.properties。
logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true">
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!-- 写入到数据库 -->
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.cj.jdbc.Driver</driverClass>
<jdbcUrl>jdbc:mysql://127.0.0.1:3306/logback_test</jdbcUrl>
<user>root</user> <!-- 数据库用户名 -->
<password>123</password> <!-- 密码 -->
</dataSource>
</connectionSource>
</appender>
<!-- 控制日志输出级别 -->
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="DB" />
</root>
</configuration>
mchange-log.properties
com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog
com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=OFF
4、测试
@Slf4j
public class Slf4jTest {
@Test
public void test(){
log.info("123");
log.debug("456");
}
}
更多推荐
所有评论(0)