日志 logback

时间 2018/10/19 16:08:48 加载中...

logback官网:

https://logback.qos.ch/


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;


Spring Boot 的 demo下载

链接:https://pan.baidu.com/s/1F6vpq9z-FLUN45P7RpWikw 密码:mxu1

版权说明
作者:SQBER
文章来源:http://sqber.com/articles/logback.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。