Logback简介
logback是由log4j创始人设计的又一个开源日志组件 , 优化了log4j存在的性能问题。
logback包含了三个模块:logback-core、logback-classic、logback-access。
-
logback-core
是其它模块的基础设施,其它模块基于它构建,显然,logback-core
提供了一些关键的通用机制。 -
logback-classic
的地位和作用等同于Log4J
,它也被认为是Log4J
的一个改进版,并且它实现了简单日志门面SLF4J。
-
logback-access
主要作为一个与Servlet
容器交互的模块,比如说tomcat
或jetty
,提供一些与HTTP
访问相关的功能。
SpringBoot的日志模块
当需要配置日志信息时,可以在application.properties、application.yaml中进行简单的配置,比如日志级别。 SpringBoot默认为我们输出的日志级别为info、warn、error,如果还使用其他级别的日志,可以在配置中进行配置 。
支持的日志级别有: ERROR, WARN, INFO, DEBUG , TRACE (Logback中没有FATAL级别,等同于ERROR)。
日志级别 trace < debug < info < warn < error < fatal,高级别的日志会输出低级别的日志信息,反之不行,不区分大小写。
在application.properties中配置:
#配置根logger的输出级别,也可以直接使用大写的 LEVEL=WARN指定 logging.level.root=WARN #指定logger的name属性为org.springframework.web,即该包下的日志级别为DEBUG logging.level.org.springframework.web=DEBUG logging.level.org.hibernate=ERROR #指定日志输出的文件路径,/在windows下是直接定位到当前工作文件磁盘下的 logging.path=/logs #指定日志文件的名称 logging.file=logs.log
在application.yaml中:
loggin: level: root: WARN
Logback配置示例
?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <logger name="org.springframework.web" level="INFO"/> <logger name="org.springboot.sample" level="TRACE" /> <!-- 开发、测试环境 --> <springProfile name="dev,test"> <logger name="org.springframework.web" level="INFO"/> <logger name="org.springboot.sample" level="INFO" /> <logger name="com.xx.projectName" level="DEBUG" /> </springProfile> <!-- 生产环境 --> <springProfile name="prod"> <logger name="org.springframework.web" level="ERROR"/> <logger name="org.springboot.sample" level="INFO" /> <logger name="com.xx.projectName" level="INFO" /> </springProfile> <!-- root用来指定最基础的日志输出级别 --> <root level="INFO"> </root> </configuration>
Logback详细配置示例:
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds" debug="false"> <include resource="org/springframework/boot/logging/logback/base.xml"/> <contextName>logback</contextName> <property name="log_path" value="/log"/><!-- 如果在Windows环境下使用/开头的路径,将会被指定到项目所在的盘符 --> <!-- %d{yyyy-MM-dd HH:mm:ss.SSS}:日志输出时间,精确到分按天切割; --> <!-- %-5level:日志级别,并且使用5个字符靠左对齐; %thread:输出日志的进程名字 --> <!-- %logger{50}:日志输出者的名字; %msg:日志消息; %n:换行符 --> <property name="log_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{50} - %msg%n"/> <property name="log_fileNamePattern" value="-%d{yyyy-MM-dd}.%i.log"/> <property name="log_maxFileSize" value="100MB"/> <property name="log_maxHistory" value="15"/> <!-- 输出到控制台,一般生产环境都是后台启动,这个没太大作用 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <encoder charset="UTF-8"> <pattern>${log_pattern}</pattern> </encoder> </appender> <!-- 输出到app.log文件 --> <appender name="APP" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log_path}/app.log</file> <encoder charset="UTF-8"> <pattern>${log_pattern}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_path}/app${log_fileNamePattern}</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${log_maxFileSize}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>${log_maxHistory}</maxHistory> </rollingPolicy> </appender> <!-- 输出到sql.log文件 --> <appender name="SQL" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log_path}/sql.log</file> <encoder charset="UTF-8"> <pattern>${log_pattern}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_path}/sql-${log_fileNamePattern}</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${log_maxFileSize}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>${log_maxHistory}</maxHistory> </rollingPolicy> </appender> <!-- 自定义包日志级别要加上additivity="false",表示不会向上传递 --> <logger name="org.springframework"> <level value="WARN"/> </logger> <logger name="org.apache" additivity="false"> <level value="WARN"/> </logger> <logger name="org.mybatis" additivity="false"> <level value="DEBUG"/> </logger> <!-- dao层的sql配置 --> <logger name="com.example.xxx.dao" level="DEBUG" additivity="false"> <appender-ref ref="SQL" /> </logger> <!-- root用来指定最基础的日志输出级别 --> <root level="INFO"> <appender-ref ref="APP"/> </root> </configuration>