Java

log4j 2 使用以及配置

2019-02-14  本文已影响0人  Vchar_Fred

一、添加maven依赖

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

如果现有组件使用Log4j 1.x并且您希望将此日志记录路由到Log4j 2,则删除所有log4j 1.x依赖项并添加以下内容

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.11.1</version>
</dependency>     

如果现有组件使用Apache Commons Logging 1.x并且您希望将此日志记录路由到Log4j 2,则添加以下内容但不删除任何Commons Logging 1.x依赖项。

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.11.1</version>
</dependency>

如果现有组件使用SLF4J并且您希望将此日志记录路由到Log4j 2,则添加以下内容但不删除任何SLF4J依赖项

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.11.1</version>
</dependency>

如果现有组件使用Java Util Logging并且您希望将此日志记录路由到Log4j 2,则添加以下内容

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jul</artifactId>
    <version>2.11.1</version>
</dependency>

二、使用

public class Demo {

    private static Logger logger = LogManager.getLogger(Demo.class);
    public static void main(String[] args){
        logger.trace("------trace---追踪级别,就是程序推进以下,一般不使用");
        logger.debug("------debug---调试级别");
        logger.info("-------info----普通级别");
        logger.warn("-------warn----警告级别");
        logger.error("------error---错误级别");
        logger.fatal("------fatal---严重级别,程序已经无法运行或应该停止的情况下");
    }
}

三、配置

log4j2默认会在classpath目录下寻找log4j.json、log4j.jsn、log4j2.xml等名称的文件,如果都没有找到,则会按默认配置输出,也就是输出到控制台。

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

Configuration 节点

如:

#关闭
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
</Configuration>   

#输出日志
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
</Configuration>     
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR" monitorInterval="20">
...
</Configuration>   

Appenders节点

常见的有三种子节点:Console、RollingFile、File

Loggers节点

常见的有两种:Root和Logger.

四、配置示例

以下示例输出INFO级别日志且到达指定大小后删除旧的的日志,ERROR级别日志按月归档分类

<?xml version="1.0" encoding="UTF-8"?>
<!--配置根节点Configuration信息
status :打印log4j自身的日志级别;
         OFF 关闭
         输出日志级别 All < Trace < Debug < Info < Warn < Error < Fatal < OFF
monitorInterval :用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s
-->
<Configuration status="ERROR" monitorInterval="86400">
    <!-- 变量配置 -->
    <Properties>
        <!--输入路径-->
        <Property name="ROOT_PATH" value="./home/logs"/>
        <Property name="INFO_LOG_PATH" value="${ROOT_PATH}/info"/>
        <Property name="ERROR_LOG_PATH" value="${ROOT_PATH}/error"/>

        <!--输出日志的格式-->
        <Property name="Console_OUT_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level 类名:%logger{80} 方法名:%M:%L %msg%n"/>
        <Property name="File_OUT_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{80}.%M:%L %msg%n"/>
    </Properties>

    <Appenders>
        <!--输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--日志过滤:控制台只输出level(info)及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--输出日志的格式-->
            <PatternLayout pattern="${File_OUT_PATTERN}"/>
        </Console>

        <!--普通日志:每个日志1GB, 总共15个,大概保留15天的日志-->
        <RollingFile name="INFO_LOG" fileName="${INFO_LOG_PATH}/info.log" filePattern="${INFO_LOG_PATH}/oldInfoLogs/info-%i.log">
            <!--日志过滤:ERROR-->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--输出日志的格式-->
            <PatternLayout pattern="${File_OUT_PATTERN}"/>
            <Policies>
                <!--每个日志大小:1GB-->
                <SizeBasedTriggeringPolicy size="10KB"/>
            </Policies>
            <!--限制日志个数:15-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!--错误日志:按月归档-->
        <RollingFile name="ERROR_LOG" fileName="${ERROR_LOG_PATH}/error.log" filePattern="${ERROR_LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <!--日志过滤:ERROR-->
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--输出日志的格式-->
            <PatternLayout pattern="${File_OUT_PATTERN}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <!--每个日志大小:500MB-->
                <SizeBasedTriggeringPolicy size="500MB"/>
            </Policies>
            <!--限制日志个数:80,基本保证每天的错误日志能够存下来-->
            <DefaultRolloverStrategy max="80"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!--指定某个包下的日志级别,同时受全局日志级别影响-->
        <Logger name="top.vchar.demo.log4j2.test" level="ERROR"/>
        <!--全局日志级别-->
        <Root level="INFO">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="INFO_LOG"/>
            <AppenderRef ref="ERROR_LOG"/>
        </Root>
    </Loggers>
</Configuration>

测试示例

package top.vchar.demo.log4j2;

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

/**
 * <p> 使用样例 </p>
 *
 * @author vchar fred
 * @version 1.0
 * @create_date 2019/1/21 14:11
 */
public class Demo {

    private static Logger logger = LogManager.getLogger(Demo.class);

    public static void main(String[] args) throws InterruptedException {
        int i=0;
        long s = System.currentTimeMillis();
        while (i++<100000){
            print();
        }
        System.out.println((System.currentTimeMillis()-s));

    }

    private static void print(){
        logger.trace("------trace---追踪级别,就是程序推进以下,一般不使用");
        logger.debug("------debug---调试级别");
        logger.info("-------info----普通级别");
        logger.warn("-------warn----警告级别");
        logger.error("------error---错误级别");
        logger.fatal("------fatal---严重级别,程序已经无法运行或应该停止的情况下");
        System.out.println("-------------------end--------------------------");
    }

}               

五、其他

在web项目中,需要在web.xml文件中配置log4j2的配置文件路径;如下:

<!--log4j2配置-->
  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j2.xml</param-value>
  </context-param>      
上一篇 下一篇

猜你喜欢

热点阅读