使用slf4j注解日志处理
slf4j注解的通常配置以及使用一、SLF4J
SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
1.所需包
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
// 如果是dubbo项目自带它不用配置并要用exclusions防jar冲突
<dubbo.version>2.7.3</dubbo.version>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
二、日志配置与输出
logback.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration debug="false" scan="false">
<contextName>gdcdgj-charging-service</contextName>
<!-- 定义变量 -->
<Property name="log.base" value="logs" />
<Property name="log.name" value="service" />
<Property name="log.level" value="INFO" />
<!-- 控制台输出 -->
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<!-- 格式化日志utf-8 -->
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %C{1} [%M:%L] [%thread]
- %msg%n</pattern>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %C{1} [%M:%L]
- %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 把日至添加进文件 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/${log.name}.out</File>
<!-- 满1GB 自动清空重新追加(true追加到文件结尾 false清空现存文件 默认true) -->
<append>false</append>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${log.base}/${log.name}.out.%d{yyyy-MM-dd}.%i</FileNamePattern>
<!-- 每天最多1GB log文件 -->
<maxFileSize>500MB</maxFileSize>
<!-- 日志存最近四天 -->
<maxHistory>4</maxHistory>
<!-- 日志最大占用1G -->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<!-- 日志格式化存储到目的地 -->
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %C{1} [%M:%L]
- %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志记录会消耗性能,但当出现问题的时候,日志又能够帮助我们快速解决问题。那么如何提高打日志的性能呢?在使用logback的时候,推荐使用AsyncAppender异步记录日志。 -->
<appender name="ASYNC"
class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>512</queueSize>
<appender-ref ref="FILE" />
</appender>
<!-- 日志输出级别 -->
<root level="${log.level}">
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNC" />
</root>
</configuration>
控制台和文件输出
一些奇怪字符的说明
%m:输出代码中指定的消息
%p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r:输出自应用启动到输出该log信息耗费的毫秒数
%c:输出所属的类目,通常就是所在类的全名
%t:输出产生该日志事件的线程名
%n:输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},
输出类似:2002年10月18日 22:10:28,921
%l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)