发表于: 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并引入的appenderappender才会生效-->
   <loggers>
       <!--建立一个默认的rootlogger,需要在rootlevel中指定输出的级别,-->
       <root level="${output_log_level}">
           <appender-ref ref="RollingFile"/>
           <appender-ref ref="RollingFile1"/>
           <appender-ref ref="Console"/>
       </root>

   </loggers>
</configuration>

顺便解释下:

onMatchDENY/ACCEPT 禁止或者接受(是否接受匹配)onMismatchDENY/NEUTRAL (是否接受其他高于level的级别)

一般的组合为:

  • onMatch=”DENY” onMismatch=”NEUTRAL “
  • onMatch=”ACCEPT ” onMismatch=”DENY”



运行后,在项目文件下,如下

不同级别的信息成功写入不同文件。


遇到的的困难

不清楚什么叫调试。。。是不是断点测试的意思啊


明日计划

继续下一步骤

收获

学习了log4j,大概了解了如何配置日志文件



返回列表 返回列表
评论

    分享到