标题:java日志、slf4j、logback、slf4j日志、logback日志
日志处理是是开发过程中必不可少的东西, 打印日志的时机、技巧很能体现出工程师编码水平。毕竟日志是线上能够定位、排查异常最直接的来源(Java工程师修炼之道)
在开发过程中我比较喜欢用 System.out.println(); 的方式去打印我想看到的数据,但在老板的强烈要求下不得不改用slf4j进行数据输出
之前也对日志有过了解和看过项目中日志的实现但一直没有自己亲手写过(都是抄的....),最近看了一本书 "Java工程师修炼之道" 看到日志篇感觉还不错,就想自己研究一下
日志分为两种, 一种是日志门面,一种是日志框架
我用的是slf4j和logback
日志门面 slf4j的使用
我们需要配置文件中(yml或properties)添加log的配置
logging:
level:
com: DEBUG # 日志级别
slf4j的用法, 我们需要在类上添加 @Slf4j注解就可以了
在方法中直接使用 log来输出不同级别的日志
输出结果
这里我们可以看到 System.out.println 只是将里面的字符输出,而slf4j将日志输出类也打印出来,这样我们可以知道这是哪个类输出的日志
是不是觉得少了点什么,没错, trace不见了,为什么呢, 这是因为我们的日志级别为 debug,trace的级别比debug低所以没有打印出来
下面我们来看下 logback
直接上代码 添加一个 logback.xml代码如下
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="c:/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_HOME}/lonewolf.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 这里是你的日志名称 -->
<fileNamePattern>${LOG_HOME}/lonewolf-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<!-- 如果按天来回滚,则最大保存时间为60天,60天之前的都将被清理掉 -->
<maxHistory>60</maxHistory>
<!-- 日志总保存量为5GB -->
<totalSizeCap>5GB</totalSizeCap>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大10MB时会被压缩和切割 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</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>
</appender>
<!--myibatis log configure-->
<!-- <logger name="com.apache.ibatis" level="TRACE"/> -->
<logger name="com.changebj" level="DEBUG" />
<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="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
在配置中指定这个文件(logback.xml和配置文件在一个目录)
logging:
level:
com: DEBUG # 日志级别
config: classpath:logback.xml
日志处理结果