lo4j2 加载与配置


log4j2 加载外部的日志配置文件 ,两种方式 ,java 代码如下

1. 方式1

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;

String currentPath = System.getProperty("user.dir");
System.setProperty("configFiles", currentPath + File.separator + "conf" + File.separator);
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
File file = new File(System.getProperty("configFiles") + "log4j2.xml");
loggerContext.setConfigLocation(file.toURI());

2. 方式2

import org.apache.logging.log4j.core.config.Configurator;

String currentPath = System.getProperty("user.dir");
System.setProperty("configFiles", currentPath + File.separator + "conf" + File.separator);

Configurator.initialize("log4j2", System.getProperty("configFiles") + "log4j2.xml");

log4j2.xml 

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

    <Properties>
        
        <Property name="LOG_INFO_LEVEL" value="debug"/>
        
        <Property name="LOG_ERROR_LEVEL" value="error"/>
        
        <Property name="LOG_HOME" value="./logs"/>
        
        <Property name="LOG_ARCHIVE" value="./logs/archive"/>
        
        <Property name="LOG_MODULE_NAME" value="wisdo"/>
        
        <Property name="LOG_MAX_SIZE" value="100 MB"/>
        
        <Property name="LOG_DAYS" value="15"/>
        
        <Property name="LOG_PATTERN"
                  value="%d{yyyy-MM-dd hh:mm:ss.SSS} | %-5level | [%t] |%logger{50} | %L | : %msg%n"/>
        
        <Property name="TIME_BASED_INTERVAL" value="1"/>
    Properties>

    <Appenders>
        
        <Console name="STDOUT" target="SYSTEM_OUT">
            
            <PatternLayout pattern="${LOG_PATTERN}"/>
            
            <ThresholdFilter level="${LOG_INFO_LEVEL}" onMatch="ACCEPT" onMismatch="DENY"/>
        Console>

        
        <RollingRandomAccessFile name="RollingRandomAccessFileInfo"
                                 fileName="${LOG_HOME}/${LOG_MODULE_NAME}-info.log"
                                 filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-info-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                
                <ThresholdFilter level="${LOG_ERROR_LEVEL}" onMatch="DENY" onMismatch="NEUTRAL"/>
                
                <ThresholdFilter level="${LOG_INFO_LEVEL}" onMatch="ACCEPT" onMismatch="DENY"/>
            Filters>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                
                <TimeBasedTriggeringPolicy interval="${TIME_BASED_INTERVAL}"/>
                <SizeBasedTriggeringPolicy size="${LOG_MAX_SIZE}"/>
            Policies>
            
            <DefaultRolloverStrategy max="${LOG_DAYS}"/>
        RollingRandomAccessFile>

        
        <RollingRandomAccessFile name="RollingRandomAccessFileError"
                                 fileName="${LOG_HOME}/${LOG_MODULE_NAME}-error.log"
                                 filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-error-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <ThresholdFilter level="${LOG_ERROR_LEVEL}" onMatch="ACCEPT" onMismatch="DENY"/>
            Filters>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="${TIME_BASED_INTERVAL}"/>
                <SizeBasedTriggeringPolicy size="${LOG_MAX_SIZE}"/>
            Policies>
            <DefaultRolloverStrategy max="${LOG_DAYS}"/>
        RollingRandomAccessFile>

    Appenders>

    <Loggers>
        <Root level="${LOG_INFO_LEVEL}">
            
            <AppenderRef ref="STDOUT"/>
            
            <AppenderRef ref="RollingRandomAccessFileInfo"/>
            <AppenderRef ref="RollingRandomAccessFileError"/>
        Root>
    Loggers>

Configuration>