欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

日志:log4j2的使用

程序员文章站 2022-05-23 18:30:54
...

log4j2优势

性能
在多线程场景中,异步记录器的吞吐量比Log4j 1.x和Logback低10倍,并且数量级的延迟更低。
Log4j 2利用Java 5并发支持,并尽可能在最低级别执行锁定

说白了就是log4j过时了,有性能厉害的肯定用厉害的版本。

自动配置

自动加载classpath下面的配置文件:log4j2-test或者log4j2,类型可以上xml、json、yml、jsn、yml、yaml、properties。java项目直接在src下面新建即可,web项目放到classpath下面。
使用xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<!-- log4j2使用说明: 使用方式如下: private static final Logger logger = LogManager.getLogger(实际类名.class.getName()); 
    2、日志说明: 
    (1)请根据实际情况配置各项参数 
    (2)需要注意日志文件备份数和日志文件大小,注意预留目录空间 
    (3)实际部署的时候backupFilePatch变量需要修改成linux目录 
    (4)status="error"输出日志自身的error级别日志 (5)monitorInterval="30"边上30s刷新加载配置
    (5) ${sys:user.home}  home目录
        ${sys:catalina.home} web部署路径
     -->
<configuration status="error" monitorInterval="30">
    <Properties>
        <!-- 支持属性占位符 -->
        <Property name="fileName">loginModule.log</Property>
        <Property name="backupFilePatch">D:/log4j2/</Property>
    </Properties>
    <!--先定义所有的appender -->
    <appenders>
        <!--这个输出控制台的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT"
                onMismatch="DENY" />
            <!-- 输出日志的格式 -->
            <PatternLayout
                pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
        </Console>

        <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="RollingFile" fileName="${backupFilePatch}${fileName}"
            filePattern="${backupFilePatch}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.log.gz">
            <PatternLayout
                pattern="%d{yyyy.MM.dd 'at' HH:mm:ss.SSS z} %-5level %class{36} %L %M - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <!-- 日志文件大小 -->
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies> 
            <!-- 最多保留文件数 -->
            <DefaultRolloverStrategy max="20" />
        </RollingFile>

        <!-- 支持策略的文件输出 -->
        <RollingRandomAccessFile name="RollingRandomAccessFile"
            fileName="${backupFilePatch}RollingRandomAccessFile/random.log"
            filePattern="${backupFilePatch}/random-%d{yyyy-MM-dd HH-mm}-%i.log" Append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>

        <!-- 异步保存日志 -->
        <File name="MyFile" fileName="${backupFilePatch}logs/app.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
        <Async name="Async">
            <AppenderRef ref="MyFile" />
        </Async>

    </appenders>

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!-- name属性可以是字符串或者是包名,additivity 默认为true,表示root也会打印 -->
        <Logger name="log4j2" level="trace" additivity="false">
            <AppenderRef ref="RollingFile" />
            <AppenderRef ref="Async" />
            <!-- <AppenderRef ref="Console" /> -->
        </Logger>

        <Logger name="romdom" level="info">
            <AppenderRef ref="RollingRandomAccessFile" />
        </Logger>

        <!--建立一个默认的root的logger -->
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>
    </loggers>
</configuration>

appender 标签里面的对应输出方式,关联logger标签里面的Logger。

java代码:

import org.apache.logging.log4j.LogManager;
使用LogManager对象获取。

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

public class Test {

    public static void main(String[] args) {
//      Logger logger = LogManager.getLogger(Test.class);
//      logger.info("ssss");

//      ${sys:user.home} 配置里面对应windows home目录
//      ${sys:catalina.home} 对应tomcat发布路径

        Logger logger = LogManager.getLogger("romdom");
        logger.info("Rde");
    }
}