Log4J2

log4j2的基本使用


-使用maven导入依赖:

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.1</version>
  </dependency>
</dependencies>

-配置log4j2

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <appenders>
        <!--控制台输出-->
        <Console name="Console" target="SYSTEM_OUT">
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>

        <!--单个文件输出,临时使用,这个log每次运行程序会自动清空-->
        <File name="Temp_log" fileName="${sys:catalina.home}/logs/ancient_books_log/temp.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!-- 每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFile" fileName="${sys:catalina.home}/logs/ancient_books_log/app.log"
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </appenders>

    <!--配置在什么情况下使用log1以什么样子的形式输出-->
    <loggers>
        <root level="info">
        </root>
        <!--开发调试-->
        <Logger name="develop" level="debug">
            <AppenderRef ref="Console"/>
        </Logger>
        <!--线上测试-->
        <Logger name="onlionTest" level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="Temp_log"/>
        </Logger>
        <!--线上运行-->
        <Logger name="run" level="error">
            <AppenderRef ref="RollingFile"/>
        </Logger>
    </loggers>
</configuration>

一些细节:

需要配置root节点,不然会默认root节点为使用控制台输出,logger节点都会先调用root节点的输出方式,再调用自己的输出方式,这样有时候会造成在控制台2次输出同样的内容影响心情

log文件路径的配置一般使用${sys:catalina.home}来获得tomcat路径,使用这个路径可以做到部署无需修改路径,但是,catcatalina.home这个环境变量只能在web项目中才有

-使用log4j2

使用时,由于项目存在几个环境,开发环境,线上测试环境,于是就使用了配置文件来存储现在项目所处的环境,项目运行第一次使用log的时候会读取配置文件,并将将环境设置存储到System.propertes中,之后就直接读取System.properties,减少io

package util;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.*;
import java.util.Properties;

/**
 * Created by zhangyanqi on 16/3/17.
 *
 * 创建log对象的工厂
 *
 */

public class LoggerFactory {

    //获得开发时的logger对象
    private  Logger getDevlopLoger() {
        return LogManager.getLogger("develop");
    }

    //获得上线测试时的logger对象
    private  Logger getOnlionTestLoger() {
        return LogManager.getLogger("onlionTest");
    }

    //获得线上运行的logger对象
    private  Logger getRunTimeLogger() {
        return LogManager.getLogger("run");
    }

    public  Logger getLogger() {
        //判断一下现在系统的环境
        String m= System.getProperty("model");
        //没有model设置
        if(m==null && "".equals(m)) {
            Properties properties = new Properties();
            FileInputStream fileInputStream = null;
            try {
                String path = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
                fileInputStream = new FileInputStream(new File(path + "runModel.properties"));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            try {
                properties.load(fileInputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.setProperty("model",properties.getProperty("model"));
        }

        String model = System.getProperty("model");
        if ("run".equals(model)) {
            return getRunTimeLogger();
        }
        if ("onlionTest".equals(model)) {
            return getOnlionTestLoger();
        } else {
            //默认develop模式
            return getDevlopLoger();
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值