用于记录系统发生的各种事件
常见记录的位置:控制台,磁盘中等
在jdk1.3以前,java日志依赖System.out.println(),System.err.println(),e.printStackTrace()
这样写日志有一个非常大的bug,没有定制,非常的机械化
在jdk1.4之后,sun添加了一个java.util.logging,简称JUL(使用较少)
配置文件的位置:%java_home%\jre\lib\logging.properties
2001年Ceki Gülcü发布了log4j,并将其捐给apache软件基金会
log4j在设计上非常优秀,定义了Logger,Appender,Level等概念
Level 由低到高
trace>debug>info>warn>error>fatal
日志的使用(一)
log4j+commons-logging
引入依赖
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
添加配置文件
启动时默认在resources中找log4j.xml
若没找到则找log4j.properties
日志级别
fatal (最高级别)致命的
error 错误
warn 警告
info 信息
debug 最低级别
trace 少许的
off 关闭日志(没有任何新)
all 所有日志(打印所有级别的日志)
设置级别,可以打印出高于本身级别的信息,根据不同的情况设置打印什么级别的信息
处理器
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.RollingFileAppender 可以指定文件的大小,若超出则新建一个文件
org.apache.log4j.DailyRollingFileAppender 每天新建一个文件
org.apache.log4j.WriterAppender 将日志以流的方式发送到任意地址
格式化
org.apache.log4j.PatternLayout 可以灵活的指定布局模式
org.apache.log4j.HTMLLayout 以HTML表格的形式进行布局
org.apache.log4j.SimpleLayout 包含日志信息级别和信息字符串
格式化时的参数
占位符 | 描述 |
---|---|
%c | 类路径 |
%d | 输出日期格式,例如:d{yyyy-MM-dd HH:mm:ss,SSS} |
%p | 输出优先级 |
%m | 消息 |
%n | 换行 |
%r | 毫秒数 |
%t | 线程 |
日志的使用(二)
logback+SLF4j
引入依赖
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。
默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="true">
<property name="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} |-[%-5p] in %logger.%M[line-%L] -%m%n"/>
<property name="log.path" value="D:/log" />
<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- Threshold=即最低日志级别,此appender输出大于等于对应级别的日志
(当然还要满足root中定义的最低级别)
-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>trace</level>
</filter>
<encoder>
<!-- 日志格式(引用变量) -->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 追加到文件中 -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${log.path}/hello.log</file>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<appender name="file2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/world.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录
文件超过最大尺寸后,会新建文件,然后新的日志文件中继续写入
如果日期变更,也会新建文件,然后在新的日志文件中写入当天日志
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 新建文件后,原日志改名为如下 %i=文件序号,从0开始 -->
<fileNamePattern>${log.path}/world-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 每个日志文件的最大体量 -->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1kb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志文件保留天数,1=则只保留昨天的归档日志文件 ,不设置则保留所有日志-->
<maxHistory>1</maxHistory>
</rollingPolicy>
</appender>
<root level="trace">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="file"/>
<appender-ref ref="file2"/>
</root>
</configuration>
配置文件的查找
优先logback-test.xml
其次logback.groovy
最后logback.xml