Log
一、引言
1.1 日志介绍
用于记录系统中发生的各种事件。就的位置常见的有:控制台、磁盘文件等
1.2 日志级别
日志级别从低到高
TRACE、DEBUG、INFO、WARN、ERROR、FATAL
1.3 日志的作用
- 通过日志观察、分析项目的运行情况(项目维护)
- 通过日志根系用户的使用情况(大数据分析)
- ...
二、解决方案1
2.1 Log4j + Commons-logging
2.1.1 导入依赖
项目中添加 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>
2.1.2 基本使用
基本API
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; public class LogTest { // 日志对象 private Log log = LogFactory.getLog(LogTest.class); public void test1(){ log.trace("hello trace~~"); log.debug("hello debug~~"); log.info("hello info~~"); log.warn("hello warn"); log.error("hello error"); log.fatal("hello fatal"); } }
2.1.3 配置信息
定义配置文件 log4j.xml
占位符 | 描述 |
%p | 输出优先级,即DEBUG、INFO、WARN、ERROR、FATAL |
%r | 输出自应用启动到输出该log信息耗费的毫秒数 |
%c | 输出所在类的全名 |
%t | 输出产生该日志事件的线程名 |
%n | 输出一个回车换行符 |
%d | 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在后面指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 10:15:12,125 |
%l | 输出日志事件的发生位置,包括类名、发生的线程,以及在代码中的行数。举例:TestLog.main(TestLog.java:12) |
<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> <!-- 输出到文件 --> <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="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n" /> </layout> </appender> <!-- 输出到文件 --> <appender name="myFile2" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="d:/log/world.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> <!-- 根logger的设置--> <root> <!--优先级设置,all < trace < debug < info < warn < error < fatal < off --> <priority value="all"/> <appender-ref ref="myConsole"/> <appender-ref ref="myFile1"/> <appender-ref ref="myFile2"/> </root> </log4j:configuration>
三、解决方案2
3.1 Logback + SLF4j
3.1.1 导入依赖
项目中导入依赖
<!-- Logback依赖,还会传递 slf4j 和 logback-core --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
3.1.2 基本使用
Logback + SLF4J 基本API
public class LogTest { private Logger log = LoggerFactory.getLogger(LogTest.class); public void test1() throws InterruptedException { while(true) { log.trace("hello trace"); log.debug("hello debug"); log.info("hello info"); log.warn("hello warn"); log.error("hello error"); //注意,logback中没有fatal日志 } }
3.1.3 配置信息
定义 logback.xml
占位符 | 描述 |
%d{yyyy-MM-dd}HH:mm:ss,SSS} | 日期 |
%5p | 日志级别,5位字符串长度显示,如果内容占不满则内同右对齐并在左侧补空格 |
%-5p | 5位字符串长度显示日志级别,如果内容占不满则内同左对齐并在右侧补空格 -代表左对齐 |
%logger | 日志所在包和类 |
%M | 日志所在方法名 |
%L | 日志所在代码行 |
%m | 日志正文 |
%n | 换行 |