log4j:最传统的log框架,核心概念 Logger appender layout
commons-log:避免库实现者限制使用者的log实现,实现动态log绑定
slf4j:动态绑定有时会失败,或者不可控,slf4j使用静态绑定
logback:增强版的log4j,提供 配置扫描更新、占位符、运行时过滤器、处理IO异常……等功能
目前最佳搭配:slf4j logback
slf4j实现方式:org.slf4j.impl.StaticLoggerBinder由集成方实现
某个配置例子logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="10 seconds">
<property name="APP_NAME" value="weitm-common" />
<property name="LOG_HOME" value="D:/workspace/common/log" />
<!--格式化输出:%d表示日期 {}中的格式满足java.text.SimpleDateFormat ,
%thread表示线程名,%-5level:级别从左显示5个字符宽度 的log等级 %msg:日志消息,%n是换行符
%logger{50} logger的名字,
%caller{3} 调用栈
%method 方法名
%line 行号
%relative 从应用开始到现在的相对时间(毫秒)
%xException 调用栈
property{key}
() 是分组
"%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray", "%boldRed","%boldGreen", "%boldYellow", "%boldBlue", "%boldMagenta""%boldCyan", "%boldWhite" and "%highlight"
-->
<property name="PATTERN" value="%-32(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]) %-5level %logger{50}::%method:%line |%msg%n" />
<property name="DETAIL_PATTERN" value="%-32(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %relative) %-5level %logger{50}::%method:%line %n%caller%msg%n %xException %n" />
<contextName>${APP_NAME}</contextName>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${DETAIL_PATTERN}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<append>true</append>
<file>${LOG_HOME}/${APP_NAME}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${APP_NAME}.%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>${PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小 -->
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1024MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 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" />
<root level="DEBUG">
<appender-ref ref="console" />
<appender-ref ref="file" />
<!-- <appender-ref ref="DEBUG"/> -->
</root>
</configuration>