市面上的日志框架
  • 市面上的日志框架有以下几种:
    jcl、slf4j、jboss-logging、log4j、jul、log4j2、logback

日志门面(日志抽象层)

日志实现

jcl(jakarta commons logging

apache jakarta小组开发的)

slf4j(simple logging facade for java)

jboss-logging

log4j

jul(java.util.logging)

log4j2

logback

  • 日志选择描述:
    从上表左边选一个接口(抽象层),右边选择一个实现
    jboss-logging:天生不是程序员使用的,属于特定的日志框架;jcl:最后一次更新时间2014年;slf4j:选择;log4j和logback由同一个人写;log4j有性能问题;改进版是logback;jul是java.util包中自带的日志;log4j2借log4j的名,但优于log4j,由apache开发;
    综上所述,选用日志门面slf4j和日志实现logback;
  • spring-boot日志描述:
    springboot底层是spring框架,spring框架默认是用jcl;
    springboot选用slf4j和logback;
  • slf4j使用
    开发时,日志记录方法调用不应该直接调用日志实现类,而是调日志抽象层方法
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}
  • slf4j框架
    每一个日志的实现框架都有自己的配置文件,使用slf4j以后,配置文件还是日志实现框架的配置文件;
  • spring boot logback配置在D盘_log4j2

  • 日志框架使用问题
    A系统开发使用日志框架:slf4j+logback;
    A系统内部依赖应用框架:spring(commons-logging)、hibernate(jboss-logging)、mybatis
    如何统一日志框架,使用slf4j输出
  • spring boot logback配置在D盘_spring_02

  • spring-boot日志框架依赖关系
  • spring boot logback配置在D盘_spring_03

  • 总结:
    spring-boot底层使用的slf4j+logback;
    springboot把其他日志替换成了slf4j;
    中间替换包;
    springboot能自动适配所有日志框架,如果我们要引入其他框架,只要且一定要把这个框架的默认日志依赖移除掉即可;
  • slf4j常用方法
    logger使用
//日志级别,由低到高:trace<debug<info<warn<error
//可以调整输出的日志级别,只打印指定级别及更高级别的信息
logger.trace("这是日志信息。。。");//代替System.out.println();
logger.debug("debug调试日志信息");
//springboot默认使用的是info级别,若没有指定就用springboot默认规定的级别:root级别
logger.info("info日志信息");
logger.warn("warn日志信息");
logger.error("error日志");

日志级别调整:application.properties

# 设置指定包内的日志级别
logging.level.com.test.package=info
# logging.file和logging.path都不指定,那么只会输出到控制台
# logging.file指定文件名和logging.path不指定,那么如果对logging.file指定了路径,那么输出到指定路径下的springboot.log中,若至指定了文件名,那么输出到当前项目下的springbootx.log中
# logging.file不指定和logging.path指定目录,那么输出到指定目录的spring.log(spring项目默认文件名)文件中
logging.path=d:/tmp/log
logging.file=springbootx.log
logging.file=d:/tmp/springbootx.log
# 指定控制台输出的日志格式
# %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=%d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n

指定配置
在类路径下放上每个日志框架自己的配置文件即可:springboot就不使用默认配置了

logging system

配置文件

logback

logback-spring.xml, logback-spring.groovy, logback.xml或logback.groovy

log4j2

log4j2-spring.xml, log4j2.xml

jul

logging.properties

注:logback.xml:直接被日志框架识别;
logback-spring.xml:日志框架不直接加载日志配置项,由springboot来解析日志配置,可以使用springboot的高级profile功能[如果要是用profile功能必须使用logback-spring.xml]

<springProfile name="dev">
	<!-- configuration to be enabled when the "staging" profile is active -->
	可以指定某段配置只在某个环境下生效
</springProfile>

<springProfile name="!dev">
	<!-- configuration to be enabled when the "staging" profile is active -->
	可以指定某段配置只在某个环境下生效
</springProfile>

启动命令中通过参数激活对应环境,默认环境是default
spring.profiles.active=dev
application.properties中也可以激活对应环境

spring.profiles.active=dev