引言
日志介绍
用于记录系统中发生的各种事件.记录的位置常见的有:控制台,磁盘文件等
日志级别
日志级别从低到高:
TRACE.DEBUG.INFO.WARN.ERROR.FATAL
- TRACE:级别最低的一种日志,一般不会使用这种日志级别
- DEBUG:在调试和测试中使用的日志级别
- INFO:常规的日志级别
- WARN:发生警告的日志级别(可以映射出我们项目潜在的一些隐患)
- ERROR:发生错误的日志级别,(如果程序发生错误时记录的日志,帮我们发现项目中出现的错误,这些错误可能会导致项目无法运行)
- FATAL:最高的一种日志级别(代表一些急需我们处理的一些错误,这些错误会导致项目崩溃)
日志作用
- 通过日志观察,分析项目的运行情况(项目维护)
- 通过日志分析用户的使用情况(大数据分析)
- …
解决分案一
Log4j+Commons-Logging
导入依赖
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
基本使用
基本API
package per.leiyu;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
/** * @author 雷雨 * @date 2020/6/21 21:59 */
public class HelloLog {
//创建日志对象
Log log = LogFactory.getLog(HelloLog.class);
@Test
public void testLog4j(){
log.trace("hello trace");
log.debug("hello debug");
log.info("hello info");
log.warn("hello warn");
log.error("hello error");
log.fatal("helli fatal");
}
}
配置信息
定义配置文件
log4j.xml
注意文件名
不能
修改,只能是这个文件名
占位符 | 描述 |
---|---|
%p | 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL |
%r | 输出自应用启动到输出该log信息耗费的毫秒数 |
%c | 输出所在类的全名(包括包路径) |
%t | 输出产生该日志事件的线程名 |
%n | 输出一个回车换行符 |
%d | 输出日志时间点和日期或事件,默认格式为ISO8601,也可以在其后指定格式,比如%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2020-06-21-22:40:26,456 |
%l | 输出日志事件的发生位置,包括类名,发生的线程,以及在代码中的行数.比如:Testlo4.main(TestLog4.java;10) |
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://org/apache/log4j/xml/log4j.dtd">
<log4j:configuration>
<!-- org.apache.log4j.ConsoleAppender 输出到控制台-->
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n"/>
</layout>
</appender>
<!--org.apache.log4j.RollingFileAppender 输出到文件 -->
<appender name="myFile1" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="d:/log/hello.log"/> <!-- 文件位置 -->
<param name="Append" value="true"/> <!--是否追加-->
<param name="MaxFileSize" value="1kb"/> <!--一个文件的最大大小-->
<param name="MaxBackupIndex" value="2"/> <!--新文件数量-->
<layout class="org.apache.log4j.PatternLayout"><!--采用的日志文件格式-->
<param name="ConversionPattern" value="%p (%c:%l)- %m%n"/>
</layout>
</appender>
<!-- org.apache.log4j.DailyRollingFileAppender -->
<appender name="myFile2" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="d:/log/log/hello.log"/><!-- 文件位置 -->
<param name="Append" value="true"/><!--是否追加-->
<layout class="org.apache.log4j.PatternLayout"><!--采用的日志文件格式-->
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n"/>
</layout>
</appender>
<root>
<!-- priority表示的是优先级的意思 优先级可选 :all < trace < debug < info < warn < error < fatal < off 填写的参数表示输出自己优先级和比自己优先级高的所有的日志级别的信息 -->
<priority value="all"/>
<!-- appender-ref表示引用一个叠加器-->
<appender-ref ref="myConsole"/>
<appender-ref ref="myFile1"/>
<appender-ref ref="myFile2"/>
</root>
</log4j:configuration>
- 不需要我们手动的去创建文件的目录,程序会帮助我们创建
- 注意如果文件中存入的日志信息超出了我们设置的最大存储容量,那么
会将之前的日志,创建一个新文件存储,把最新的日志信息存储到我们的之前最预先设置的文件中
解决方案二
Logback+SLF4j
导入依赖
项目中导入依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
基本使用方式和Log4j相同,这里不赘述