默认日志Logback配置
默认日志Logback
Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J(Simple Logging Facade For Java)。
-
与Log4J比较,优点如下:
- 同样的代码路径,Logback 执行更快
- 更充分的测试
- 原生实现了 SLF4J API(Log4J 还需要有一个中间转换层)
- 内容更丰富的文档
- 支持 XML 或者 Groovy 方式配置
- 配置文件自动热加载
- 从 IO 错误中优雅恢复
- 自动删除日志归档
- 自动压缩日志成为归档文件
- 支持 Prudent 模式,使多个 JVM 进程能记录同一个日志文件
- 支持配置文件中加入条件判断来适应不同的环境
- 更强大的过滤器
- 支持 SiftingAppender(可筛选 Appender)
- 异常栈信息带有包信息
-
配置输出的地址和输出级别
在
application.properties
中添加如下配置:logging.path=/user/local/log logging.level.com.favorites=DEBUG logging.level.org.springframework.web=INFO logging.level.org.hibernate=ERROR
-
日志级别从低到高
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
如果一个 logger 允许打印一条具有某个日志级别的信息,那么它也必须允许打印具有比这个日志级别更高级别的信息,而不允许打印具有比这个日志级别更低级别的信息。
-
级别控制
logging.level.* = LEVEL
-
logging.level
:日志级别控制前缀,*
为包名或Logger
名; -
LEVEL
:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF;
-
-
自定义日志配置
根据不同的日志系统,按如下规则组织配置文件名后,将文件放入src/main/resources
目录下,可被系统正确加载。
-
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
使用自定义配置文件名,如logging-config.xml
。在application.properties
中添加如下配置:
logging.config=classpath:logging-config.xml
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<contextName>logback</contextName>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="log.path" value="D:\log\logback.log"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>logback.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG"/>
<logger name="org.hibernate.SQL" level="DEBUG"/>
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
</configuration>
-
根节点
<configuration>
包含的属性-
scan
:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -
scanPeriod
:设置监测配置文件是否有修改的时间间隔。如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效,默认的时间间隔为1分钟。 -
debug
:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态,默认值为false。
-
-
设置上下文名称
<contextName>
每个logger都关联到logger上下文,默认上下文名称为
default
。但可以使用<contextName>
设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName
来打印日志上下文名称。 -
设置变量
<property>
用来定义变量值的标签,
<property>
有两个属性,name
和value
;其中name
的值是变量的名称,value
的值时变量定义的值。通过<property>
定义的值会被插入到logger上下文中。定义变量后,可以使${}
来使用变量。 -
子节点
<appender>
appender用来格式化日志输出节点,有俩个属性
name
和class
,class
用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。-
<encoder>
表示对日志进行格式化编码-
%d{HH: mm:ss.SSS}
——日志输出时间 -
%thread
——输出日志的进程名字,这在Web应用以及异步任务处理中很有用 -
%-5level
——日志级别,并且使用5个字符靠左对齐 -
%logger{50}
——表示logger名字最长50个字符,否则按照句点分割。 -
%msg
——日志消息
-
%n
——平台的换行符 -
-
-
子节点
<root>
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
<root>
可以包含零个或多个<appender-ref>
元素,标识这个appender
将会添加到这个logger。 -
子节点
<logger>
<logger>
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>
。<logger>
仅有一个name
属性,一个可选的level
和一个可选的addtivity
属性。-
name
:用来指定受此logger约束的某一个包或者具体的某一个类。 -
level
:用来设置打印级别,大小写无关(TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF),还有一个特俗值INHERITED
或者同义词NULL
,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。 -
addtivity
:是否向上级logger传递打印信息。默认是true。
-