springboot中日志使用

默认日志Logback

SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logging, log4j, logback,commons-logging, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。

在这里插入图片描述
从上图可以看到,日志输出内容元素具体如下:

  • 时间日期:精确到毫秒

  • 日志级别:ERROR, WARN, INFO, DEBUG or TRACE

  • 进程ID

  • 分隔符:— 标识实际日志的开始

  • 线程名:方括号括起来(可能会截断控制台输出)

  • Logger名:通常使用源代码的类名

  • 日志内容

添加maven依赖

假如maven依赖中添加了spring-boot-starter-logging:
在这里插入图片描述

那么,我们的Spring Boot应用将自动使用logback作为应用日志框架,Spring Boot启动的时候,由org.springframework.boot.logging.Logging-Application-Listener根据情况初始化并使用。

但是呢,实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。

常用日志配置(application.properties)

// 指定当前项目日志的输出等级
logging.level.root=ERROR,WARN, INFO, DEBUG or TRACE
//com.dudu包下所有class以DEBUG级别输出
logging.level.com.dudu=DEBUG 
// 将日志输出到当前项目根路径
logging.file=file_name
// 将日志输出到指定目录里的spring.log文件中,推荐采用logging.file
logging.path=directory

//日志输出格式说明:
// %d 输出日期时间,
// %thread 输出当前线程名,
// %-5level输出日志级别,左对齐5个字符宽度
// %logger [50}输出全类名最长50个字符,超过按照句点分割
// %msg日志信息
// %n 换行符

//修改控制台输出的日志格式
logging.pattern.console=%d (yyyy-MM-dd[%thread] %-5level %logger [50]} - %msg%n
// 修改文件中输出的日志格式
logging.pattern.file=%Md(y.y-lM-dd HHE:mm:ss.SSS) >>> [Mthread] >>> %-5level .>>>. %logger 50] >>>%msgn

自定义日志配置

由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  • Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy

  • Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml

  • Log4j2:log4j2-spring.xml, log4j2.xml

  • JDK (Java Util Logging):logging.properties

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。

上面是默认的命名规则,并且放在src/main/resources下面即可。

指定日志配置文件名

如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以通过logging.config属性指定自定义的名字:

logging.config=classpath:logging-config.xml

logback-spring.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
 
<!-- scan="true"开启对配置信息的自动扫描(默认时间为60秒扫描一次) 注:当此文件的配置信息发生变化时,此设置的作用就体现出来了,不需要重启服务 -->
<configuration scan="true">
 
	<!-- 通过property标签,来存放key-value数据,便于后面的动态获取,提高程序的灵活性 -->
	<property name="log-dir" value="log" />
	<property name="log-name" value="logFile" />
 
	<!-- >>>>>>>>>>>>>>>>>>>>>>>>>配置appender(可以配置多个)>>>>>>>>>>>>>>>>>>>>>>>>> -->
	<!-- 
	    name:自取即可, 
	    class:加载指定类(ch.qos.logback.core.ConsoleAppender类会将日志输出到>>>控制台), 
		patter:指定输出的日志格式 
	-->
	<appender name="consoleAppender"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern>
			<!-- 日志编码 -->
			<charset class="java.nio.charset.Charset">UTF-8</charset>
		</encoder>
	</appender>
 
	<!-- 
		name:自取即可, 
		class:加载指定类(ch.qos.logback.core.rolling.RollingFileAppender类会将日志输出到>>>指定的文件中), 
		patter:指定输出的日志格式 file:指定存放日志的文件(如果无,则自动创建) rollingPolicy:滚动策略>>>每天结束时,都会将该天的日志存为指定的格式的文件 
		FileNamePattern:文件的全路径名模板 (注:如果最后结尾是gz或者zip等的话,那么会自动打成相应压缩包) 
	-->
	<appender name="fileAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 把日志文件输出到:项目启动的目录下的log文件夹(无则自动创建)下 -->
		<file>${log-dir}/${log-name}.log</file>
		<!-- 把日志文件输出到:name为logFilePositionDir的property标签指定的位置下 -->
		<!-- <file>${logFilePositionDir}/logFile.log</file> -->
		<!-- 把日志文件输出到:当前磁盘下的log文件夹(无则自动创建)下 -->
		<!-- <file>/log/logFile.log</file> -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- TimeBasedRollingPolicy策略会将过时的日志,另存到指定的文件中(无该文件则创建) -->
			<!-- 把因为 过时 或 过大  而拆分后的文件也保存到目启动的目录下的log文件夹下  -->
			<fileNamePattern>${log-dir}/${log-name}.%d{yyyy-MM-dd}.%i.log
			</fileNamePattern>
			<!-- 设置过时时间(单位:<fileNamePattern>标签中%d里最小的时间单位) -->
			<!-- 系统会删除(分离出去了的)过时了的日志文件 -->
			<!-- 本人这里:保存以最后一次日志为准,往前7天以内的日志文件 -->
			<MaxHistory>
				7
			</MaxHistory>
			<!-- 滚动策略可以嵌套; 
			         这里嵌套了一个SizeAndTimeBasedFNATP策略,
			            主要目的是: 在每天都会拆分日志的前提下,
			            当该天的日志大于规定大小时, 
				        也进行拆分并以【%i】进行区分,i从0开始 
		    -->
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>5MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<!-- 日志输出格式 -->
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern>
			<!-- 日志编码 -->
			<charset class="java.nio.charset.Charset">UTF-8</charset>
		</encoder>
	</appender>
 
	<!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>使用appender>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
	<!--
	    指定[哪个包]下使用[哪个appender],并设置 记录到日志文件中的日志的最下
	    级别(低于次级别的日志信息不回输出记录到日志文件中)
	    注:日志级别有: trace|debug|info|warn|error|fatal
	    注:当有多处指定了要记录的日志的最下日志级别时,走优先级最高的,优先级:
	       logback-spring.xml中 > 启动jar包时 > xxx.properties/xxx.yml中
	-->
	<!--<logger name="com" level="trace">-->
	<logger name="com">
		<!-- 指定使用哪个appender -->
		<appender-ref ref="fileAppender" />
	</logger>
	<!--
	    root:logger的根节点,appender-ref:确定使用哪个appender,将日志信息显示在console
		注:如果不指定配置此项的话,那么SpringBoot启动后,将不会在console打印任何信息
	-->
	<root>
		<appender-ref ref="consoleAppender" />
	</root>
</configuration>

logback的使用

使用注解的方式

需要导入lombok

.......
import lombok.extern.slf4j.Slf4j;

// 添加注解@Slf4j
@Slf4j
@Component
public class CustomerRealm extends SimpleAccountRealm {
	
	public void fun(){

		log.debug("未能找到与用户名" + principal.getUsername() + "相符合的账户");
		log.error(....);
		log.info(....);
		log.warn(....);
	    log.trace(....);
	
	}	

}

使用类的方法

import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import com.alibaba.fastjson.JSON;
import com.aspire.mapper.JavaAnnotationMapper;
import com.aspire.model.Employee;
import com.aspire.util.ExceptionUtil;
 
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { AbcLogbackDemoApplication.class })
public class AbcLogbackDemoApplicationTests {
 
	/** 自动装配 */
	@Autowired
	JavaAnnotationMapper javaAnnotationMapper;
 
	/** Logger实例 */
	static final Logger logger = LoggerFactory.getLogger(AbcLogbackDemoApplicationTests.class);
 
	/**
	 * logback测试
	 *
	 * @date 2018年7月26日 下午4:12:56
	 */
	@Test
	public void logbackTest() {
		logger.info("进入logbackTest方法了!");
		try {
			Employee employee = new Employee("邓某", 24, "男");
			logger.info("employee对象的相应参数为:" + JSON.toJSONString(employee));
			javaAnnotationMapper.singleInsertAutoGetKey(employee);
			Integer id = employee.getId();
			logger.info("向表中插入employee对象的数据后,自动获取到的主键为:" + id);
			// System.out.println(1 / 0);
		} catch (Exception e) {
			logger.error("出错咯!错误信息:" + e.getMessage(), e.getCause());
			// 打印出错误堆栈信息
			e.printStackTrace();
		}
		logger.info("SpringBoot使用logback示例。");
		logger.info("logbackTest方法执行完毕!");
	}
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值