springboot的日志概述

springboot的日志概述

级别的控制:

  • TRACE<DEBUG<INFO<WARN<ERROR<FATAL
  • 默认的springboot设置为info,只会在控制台里面输出info和大于info的(error和warn)
  • 如果以debug的方式启动,会将debug的信息也输出到控制台里面,但是日志的级别实际还是没有变
  • 设置日志的级别:
    • 格式为‘logging.level.* = LEVEL’
    • LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
    • 具体的可以设置为logging.level.com.qp=DEBUG 代表着com.qp包下的所有Class都以debug级别输出--------就是将除了trace的全都输出到控制台

输出位置的控制:

  • 正常情况下只会在控制台里面进行输出,不会写到日志文件,如果想要编写控制台输出之外的日志文件,需要设置logging.file或logging.path属性

  • logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log

  • logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log

  • 如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。

    如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log

  • 二者不能同时使用,如若同时使用,则只有logging.file生效

自定义日志配置

----暂时我用不到------

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

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

日志框架

  • log4j和slf4j区别:

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

所以就是:

log4j logback commons-logging都是日志的框架

在日志的框架下面还有一层,就是调用这个框架的接口,所有的框架日志接口都是slf4j

  • 框架介绍:

默认的日志框架是logback,而且在这里强调一下,logback框架是很强的框架,比Log4j框架是好用很多的,别想着去换成Log4j就行。

  • 在正常的项目中,如果想要使用日志,就直接添加个注解@Slf4j (在添加了lombok的基本上),然后直接就可以在项目中使用log.info(xxxxx)了。
  • 这个的原理就是:正常的项目里面存在着默认的日志框架logback,我们使用@slf4j来调用这个日志框架使用里面的log.info方法

使用logback框架具体操作

  • 自定义日志配置文件:配置文件的寻找过程
    • 尝试在 classpath下查找文件logback-test.xml;
    • 如果文件不存在,则查找文件logback.xml;
    • 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台。
  • 自己在main的resource下建立一个logback.xml

image-20210624164906687

  • 里面具体的语法我寻思着应该都是CV能解决的。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!--控制台上的输出-->
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
				<expression>return logger.contains("nacos");</expression>
			</evaluator>
			<OnMatch>DENY</OnMatch>
			<OnMismatch>ACCEPT</OnMismatch>
		</filter>
		<encoder>
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<!--保存所有的日志信息-->
	<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>./logs/server.log</file>
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
				<expression>return logger.contains("nacos");</expression>
			</evaluator>
			<OnMatch>DENY</OnMatch>
			<OnMismatch>ACCEPT</OnMismatch>
		</filter>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>./logs/server.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>30MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>10</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<!--保存WARN的日志-->
	<appender name="warnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>./logs/server_warn.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 每天一归档 -->
			<fileNamePattern>./logs/server_warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>20MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>10</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>WARN</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

	<!--保存error的日志-->
	<appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>./logs/server_error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 每天一归档 -->
			<fileNamePattern>./logs/server_error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>20MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>10</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>


	<appender name="async-stdout" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="stdout"/>
		<includeCallerData>true</includeCallerData>
	</appender>
	<appender name="async-rollingFile" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="rollingFile"/>
		<includeCallerData>true</includeCallerData>
	</appender>
	<appender name="async-warnFile" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="warnFile"/>
		<includeCallerData>true</includeCallerData>
	</appender>
	<appender name="async-errorFile" class="ch.qos.logback.classic.AsyncAppender">
		<appender-ref ref="errorFile"/>
		<includeCallerData>true</includeCallerData>
	</appender>

	<logger name="org.quartz.impl.jdbcjobstore.JobStoreTX" level="INFO"/>
	<logger name="org.quartz.impl.jdbcjobstore.StdRowLockSemaphore" level="INFO"/>
	<logger name="org.springframework.amqp.rabbit.core.RabbitTemplate" level="INFO"/>
	<logger name="org.springframework.amqp.rabbit.listener.BlockingQueueConsumer" level="INFO"/>

	<root level="INFO">
		<appender-ref ref="async-stdout"/>
		<appender-ref ref="async-rollingFile"/>
		<appender-ref ref="async-warnFile"/>
		<appender-ref ref="async-errorFile"/>
	</root>
</configuration>
  • 最后会生成这些Log

image-20210624165045166

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值