日志 logback


logback官网:
Maven项目下简单使用
pom.xml文件中添加依赖
<!-- logback 只配置这个,相关依赖jar会下载下来 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
修改pom.xml文件后,Ctrl+Shift+F 格式化,Alt+F5 更新Maven库,下载 logback 的相关jar包文件,下载的文件有
logback-classic-1.2.3.jar
logback-core-1.2.3.jar
slf4j-api-1.7.25.jar
添加配置文件logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 文件输出格式 --> <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" /> <property name="simplePattern" value="[%thread] %msg %n"></property> <!-- test文件路径 --> <property name="TEST_FILE_PATH" value="d:/test.log" /> <!-- pro文件路径 --> <property name="PRO_FILE_PATH" value="./log.txt" /> <property name="serverName" value="127.0.0.1" /> <property name="port" value="3306" /> <property name="dbName" value="logdb" /> <property name="user" value="root" /> <property name="password" value="123456" /> <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PRO_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log </fileNamePattern> <MaxHistory>100</MaxHistory> <totalSizeCap>20MB</totalSizeCap> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender"> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <dataSource class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"> <serverName>${serverName}</serverName> <port>${port}</port> <databaseName>${dbName}</databaseName> <user>${user}</user> <password>${password}</password> </dataSource> </connectionSource> </appender> <logger name="com.zaxxer.hikari" level="ERROR" /> --> <root level="INFO"> <appender-ref ref="PROD_FILE" /> <!-- <appender-ref ref="DB" /> --> </root> </configuration>
上面的配置,在root节点我们使用的是 PROD_FILE 的日志保存形式,即保存到了文件中。
logback.xml 的详细说明稍后再说。
使用
import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(Program.class); logger.error("错误信息来了"); //格式化信息 logger.info("人员:{},信息:{}", "小明", "没有数据");
Spring Boot 下使用 logback
Spring Boot 下使用 logback 来记录日志的形式和简单的maven项目大体相同。
参照 http://blog.sqber.com/articles/java-test1-simple-page.html 创建一个简单的 Spring Boot 项目。
当引入 spring-boot-starter-web 依赖时,其实已经包含 logback 了,可以从 maven dependencies 中可以看到
logback-classic-1.2.3.jar
logback-core-1.2.3.jar
slf4j-api-1.7.25.jar
这三个 jar 包文件,
所以在 Spring Boot 项目下面,并不需要引入 logback 的依赖了。
添加 logback-spring.xml 配置文件
之前,在项目中添加的配置文件名称为 logback.xml 文件,而在 spring boot 中,默认的配置文件名称为 logback-spring.xml ,我们在
src/main/resources 中添加此文件。
logback-spring.xml 内容:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 文件输出格式 --> <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" /> <property name="simplePattern" value="[%thread] %msg %n"></property> <!-- test文件路径 --> <property name="TEST_FILE_PATH" value="d:/test.log" /> <!-- pro文件路径 --> <property name="PRO_FILE_PATH" value="./opt/test/log" /> <property name="serverName" value="127.0.0.1" /> <property name="port" value="3306" /> <property name="dbName" value="logdb" /> <property name="user" value="root" /> <property name="password" value="123456" /> <!-- 开发环境 --> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${simplePattern}</pattern> </encoder> </appender> <!-- <logger name="com.cnki.bdms" level="debug" /> <logger name="com.cnki.bdms.module.search.dal" level="debug"/> --> <root level="info"> <appender-ref ref="CONSOLE" /> </root> </springProfile> <!-- 测试环境 --> <springProfile name="test"> <!-- 每天产生一个文件 --> <appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${TEST_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${TEST_FILE_PATH}/info.%d{yyyy-MM-dd}.log </fileNamePattern> <!-- 文件最大保存历史数量 --> <MaxHistory>100</MaxHistory> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <!-- <logger name="com.cnki.bdms" level="debug" /> --> <root level="info"> <appender-ref ref="TEST-FILE" /> </root> </springProfile> <!-- 生产环境 --> <springProfile name="prod"> <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PRO_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log </fileNamePattern> <MaxHistory>100</MaxHistory> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <appender name="DB" class="ch.qos.logback.classic.db.DBAppender"> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <dataSource class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"> <serverName>${serverName}</serverName> <port>${port}</port> <databaseName>${dbName}</databaseName> <user>${user}</user> <password>${password}</password> </dataSource> </connectionSource> </appender> <root level="info"> <appender-ref ref="PROD_FILE" /> <appender-ref ref="DB" /> </root> </springProfile> </configuration>
logback-spring.xml 中 包含了开发、测试、生产 三个不同情况下的 logback 配置文件。
在 src/main/resources 下面添加 Application.yml 文件,配置当前是什么环境。Application.yml 是 spring boot 的配置文件。
其内容如下:
spring:
profiles:
active: prod
active 可以写 test、dev、prod 分别对应了 logback 的三个配置。
使用
使用方法和之前的基本相同。
@Controller public class HomeController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @ResponseBody @GetMapping("/") public String index() { logger.info("信息:{}","信息来了"); logger.error("错误来了:{}","错误来了"); return "Welcome my site"; } }
说明
上面的 logback-spring.xml 文件中,在“生产环境”下,配置了两个 appender,意思是日志文件保存了两份,一是保存到文件中了,一时保存到数据库中了。
其中一个 appender 的 name 是DB,这个其实是将日志文件保存到数据库中。
这个配置写的是
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
也就是保存到 mysql 中,因此要在pom.xml 中添加上 mysql-connector 的依赖。
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency>
另外,我们还要创建保存日志信息的数据库。
脚本如下:
logback-mysql-scripts.sql
# Logback: the reliable, generic, fast and flexible logging framework. # Copyright (C) 1999-2010, QOS.ch. All rights reserved. # # See http://logback.qos.ch/license.html for the applicable licensing # conditions. # This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender. # # It is intended for MySQL databases. It has been tested on MySQL 5.1.37 # on Linux 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;
*昵称:
*邮箱:
个人站点:
*想说的话: