不多说,一言不合直接上代码logback.xml,在resouece下面建文件logback.xml,配置如下。敬请观看,欢迎大咖请教
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!-- 设置全局log的变量路径 --> <property name="logPath" value="./logs"/> <!-- 设置名称为STDOUT的appender为一个控制台输出appender --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoder shi PatternLayoutEncoder默认的一个 --> <encoder> <!-- %d{yyyy-MM-dd HH:mm:ss.SSS} %d为输出日期,{yyyy-MM-dd HH:mm:ss.SSS}为日期的格式, 与java.text.SimpleDateFormat格式一样 ,d也可以写成 date--> <!-- [%thread] 为[当前线程名称] 也可以写成 [%t] --> <!-- %-5p 为输出日记界别,并且输出后,打印五个空格 %p亦可以写成 %le / %level --> <!-- %logger{36} 表示logger名字最长36个字符,否则按照句点分割。 --> <!-- %file 表示此条日记信息是在哪个文件输出的 ,也可以 %F--> <!-- %line 表示输出此日记的语句位于哪一行代码 也可以 %L--> <!-- %msg msg表示打印输出的信息 也可以写成 %m / %message --> <!-- %n 表示换行 --> <!-- 其他配置可见 PatternLayout.defaultConverterMap --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5le %logger{36} (%file:%line\) -%msg %n</pattern> <!-- 设置控制台输出编码 --> <charset>UTF-8</charset> </encoder> </appender> <!-- 设置一个可以滚动的文件appender --> <appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 设置filter,决定什么时候执行 ThresholdFilter 为临界值过滤器, 过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- 说明是error级别以上的才执行 --> <level>ERROR</level> </filter> <!-- 设置文件输出路径和名称--> <File>${logPath}/error.log</File> <!-- 设置滚动策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 设置名称模式 %i 索引,从0开始。。。。--> <fileNamePattern>/error-%d{yyyyMMdd}.log.%i</fileNamePattern> <!-- 设置出发滚动策略 使用时间和大小共同决定的策略--> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 测试暂时设置1kb,正常开发可以按情况设置 --> <maxFileSize>1kb</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- 日记保留多久(d) 上面说根据时间和大小来决定,但是上面的策略只设置了大小,为什么呢 官方给出的解释是 the maxHistory property is given to TimeBasedRollingPolicy instead of to the TimeBasedFileNamingAndTriggeringPolicy. This makes it more convenient for the user at the cost of inconsistency here. --> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 滚动策略都设置好了,设置输出布局 --> <!-- <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern> </layout>--> <!-- 其他的layout也可以使用下面的设置方式 --> <encoder> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 指定某一个包或者某一个类的打印级别以及是否传入root进行打印 --> <!-- additivity:是否向上级logger传递打印信息。默认是true。--> <!-- <logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。--> <!-- name:用来指定受此logger约束的某一个包或者具体的某一个类。--> <!-- level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL, 代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。--> <!-- mybatis框架 数据库相关的日记信息 --> <!--<logger name="jdbc.sqltiming" level="DEBUG"/> <logger name="com.ibatis" level="DEBUG" /> <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" /> <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" /> <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" /> <logger name="java.sql.Connection" level="DEBUG" /> <logger name="java.sql.Statement" level="DEBUG" /> <logger name="java.sql.PreparedStatement" level="DEBUG" />--> <!-- hibernate框架 数据库相关的日记信息 --> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="TRACE"/> <logger name="org.hibernate.SQL" level="DEBUG"/> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="ERROR_APPENDER"/> </root> </configuration>