发表于: 2017-11-07 20:29:59
1 668
day17
今日完成
1,使用log4j2查看日志
步骤较为简单
首先在pom.xml文件中添加依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
然后在resources下创建log4j2.xml,日志级别为debug,简单的配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!--简单配置-->
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
创建类,测试下
package com.jnshu.log4j2;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
public class Log4jDemo {
private static Logger logger=LogManager.getLogger(Log4jDemo.class.getName());
public static void main(String[] args){
logger.trace("this is trace level-");
logger.debug("this is debug level--");
logger.info("this is info level---");
logger.warn("this is warn level----");
logger.error("this is error level-----");
logger.fatal("this is fatal level-------");
}
}
控制台信息,只输出debug级别以上的信息
按照日志级别将日志输出到不同文件,
<?xml version="1.0" encoding="UTF-8"?>
<!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF -->
<configuration status="OFF">
<!-- 定义下面的引用名 -->
<Properties>
<property name="log_pattern">%d{yyy-MM-dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n</property>
<property name="file_name">logs/app.log</property>
<property name="rolling_file_name">logs/app-%d{yyyy-MM-dd}-%i.log.gz</property>
<property name="every_file_size">10M</property><!-- 日志切割的最小单位 -->
<property name="output_log_level">debug</property><!-- 日志输出级别 -->
</Properties>
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<!--输出日志的格式-->
<PatternLayout pattern="${log_pattern}"/>
</Console>
<!-- 重要的是,如果有多个ThresholdFilter,那么Filters是必须的,同时在Filters中,首先要过滤不符合的日志级别,把不需要的首先DENY掉,
然后再ACCEPT需要的日志级别,这个次序不能搞颠倒。-->
<!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<!-- 按月生成归档日志,可以使用 filePattern="logs/$${date:yyy-MM}/app-%d{MM-dd-yyy}-%i.log.gz" -->
<!-- 显示error级别之外的信息 -->
<RollingFile name="RollingFile" fileName="${file_name}" filePattern="${rolling_file_name}">
<PatternLayout pattern="${log_pattern}"/>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
<!--如果需要配置多个RollingFile地址,还需要在root下添加 <appender-ref ref="RollingFile1"/> 只显示error级别的信息-->
<RollingFile name="RollingFile1" fileName="logs/app1.log" filePattern="logs/app1-%d{yyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--建立一个默认的root的logger,需要在root的level中指定输出的级别,-->
<root level="${output_log_level}">
<appender-ref ref="RollingFile"/>
<appender-ref ref="RollingFile1"/>
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
顺便解释下:
onMatch | DENY/ACCEPT 禁止或者接受(是否接受匹配) | onMismatch | DENY/NEUTRAL (是否接受其他高于level的级别) |
一般的组合为:
- onMatch=”DENY” onMismatch=”NEUTRAL “
- onMatch=”ACCEPT ” onMismatch=”DENY”
运行后,在项目文件下,如下
不同级别的信息成功写入不同文件。
遇到的的困难
不清楚什么叫调试。。。是不是断点测试的意思啊
明日计划
继续下一步骤
收获
学习了log4j,大概了解了如何配置日志文件
评论