Log4J
一,引言
-
日志介绍
日志用于记录系统中发生的风各种时间,记录的位置常见的有:控制台,磁盘文件等
-
日志级别
-
TRACE: 基本不怎么用,无差别输出
-
DEBUG: 开发或调试中使用,看到代码运行过程中的细节
-
INFO: 常规,项目部署运行之后需要长期观测
-
WARN :警告,可能存在隐患
-
ERROR : 错误,
-
FATAL: 出现了严重的错误,可能导致系统无法运行
-
二,解决方案1: Log4g+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
public class LogTest {
private Log log = LogFactory.getLog(LogTest.class);
@Test
public void test1() {
log.trace("这是一个TRACE级别的日志输出");
log.debug("这是一个DEBUG级别的日志输出");
log.info("这是一个INFO级别的日志输出");
log.warn("这是一个WARN级别的日志输出");
log.error("这是一个ERROR级别的日志输出");
log.fatal("这是一个FATAL级别的日志输出");
}
}
- 基本配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER"
"http://org/apache/log4j/xml/log4j.dtd">
<log4j:configuration>
<!-- 追加器 追加器名字 输出位置 -->
<!-- 输出到控制台的日志-->
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<!-- -->
<layout class="org.apache.log4j.PatternLayout">
<!-- 输出格式 %c:输出日志的类 %p:日志的级别 %m 日志内容-->
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p} %m%n"/>
</layout>
</appender>
<!-- 输出到文件的日志-->
<appender name="myFile" class="org.apache.log4j.RollingFileAppender">
<!-- 文件位置-->
<param name="File" value="log.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="log2.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="myFile"/>
<appender-ref ref="MyFile2"/>
</root>
</log4j:configuration>
三.解决方案2:Logback+SLF4j
- 导入依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
- 基本配置
<?xml version="1.0" encoding="UTF-8" ?>
<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"/>
<!-- 输出到控制台的追加器-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 普通的文件追加器-->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>log1.log</file>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
</encoder>
</appender>
<!-- 滚动的日志追加器, 按天生成日志文件-->
<appender name="file2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 设置文件名-->
<file>RollingFileAppender.log</file>
<!-- 日志输出格式和字符集-->
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>UTF-8</charset>
</encoder>
<!--设置日志规则-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 设置超过之后日志文件的命名格式-->
<fileNamePattern>RollingFileAppender-%d{yyyy-MM- dd}.%i.log</fileNamePattern>
<!-- 设置单个日志文件最大大小-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>8kb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 设置最高保留几天的日志-->
<maxHistory>1</maxHistory>
</rollingPolicy>
</appender>
<root level="trace">
<appender-ref ref="CONSOLE"/>
<!-- <appender-ref ref="file"/>-->
<appender-ref ref="file2"/>
</root>
</configuration>