首页 > 其他分享 >log4j2 使用

log4j2 使用

时间:2022-12-03 16:01:35浏览次数:37  
标签:xml log slf4j 使用 log4j2 log4j

1、pom 依赖

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

log4j-slf4j-impl 已经依赖了 log4j-api, log4j-core 两个依赖
image

这里为了使用 slf4j做日志门面,所以直接用了 log4j-slf4j-impl,其它做法可以直接引入 log4j-api 和 log4j-core 包也是一样的效果


比如,如果不想用 slf4j,那依赖是这样子的
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.19.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.19.0</version>
    </dependency>

但使用 slf4j 和直接使用 log4j, 在使用上有区别的:

  • 使用 slf4j:
    Logger log = LoggerFactory.getLogger(Tank.class);
    (推荐使用 slft4j, 它是日志的门面,底层实现可以使用 log4j,也可以使用 logback,特别对于写公共模块更为重要)

  • 使用 log4j2
    Logger log = LogManager.getLogger(Tank.class);

log4j2.xml 模板

(只引入依赖,没有配置 log4j2.xml 模板是不行的~ 然后,把这个 log4j2.xml 文件放到 resources 下面即可。 文件名也要用 log4j2.xml, 如果用了log4j.xml 貌似是不行的,当然,如果模板用错了,也会报错~)

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 -->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 -->

<configuration status="WARN" monitorInterval="10">

    <Properties>
        <Property name="LOG_HOME">./logs</Property>
        <Property name="MODLUE_NAME">algo-module</Property>
        <Property name="INFO_FILE_NAME">${MODLUE_NAME}_info.log</Property>
        <Property name="INFO_ARCHIVE_NAME">${MODLUE_NAME}_info_%d{yyyyMMdd}.log
        </Property>
        <Property name="ERROR_FILE_NAME">${MODLUE_NAME}_error.log</Property>
        <Property name="ERROR_ARCHIVE_NAME">${MODLUE_NAME}_error_%d{yyyyMMdd}.log
        </Property>
        <property name="BUFFER_SIZE">524288</property>
        <property name="ROLLING_INTERVAL">1</property>

    </Properties>
    <!--先定义所有的appender -->
    <appenders>
        <!--这个输出控制台的配置 -->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}|%c|%msg%n"/>
            <Filters>
                <ThresholdFilter level="debug" onMatch="ACCEPT"
                                 onMismatch="DENY"/>
            </Filters>
        </console>
        <RollingRandomAccessFile name="RollingFileInfo"
                                 fileName="${LOG_HOME}/${INFO_FILE_NAME}"
                                 filePattern="${LOG_HOME}/${INFO_ARCHIVE_NAME}"
                                 immediateFlush="true" bufferSize="${BUFFER_SIZE}" append="true">

            <PatternLayout>
                <pattern>${sys:log_prefix:-}%d{yyyyMMddHHmmss}|${LOG_CODE}|%-level|%c|%msg%n
                </pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="${ROLLING_INTERVAL}"
                                           modulate="true"/>
            </Policies>
            <!-- 只记录info和warn级别信息 -->
            <Filters>
                <!-- DENY 不容许error级别以上写入该文件 NEUTRAL 中立, 上下两个条件组合,取中间值 -->
                <!-- <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> -->
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>

        </RollingRandomAccessFile>

        <!--immediateFlush 是否立即写入, bufferSize 缓存大小 -->
        <RollingRandomAccessFile name="RollingFileError"
                                 fileName="${LOG_HOME}/${ERROR_FILE_NAME}"
                                 filePattern="${LOG_HOME}/${ERROR_ARCHIVE_NAME}"
                                 immediateFlush="true" bufferSize="${BUFFER_SIZE}" append="true">

            <PatternLayout>
                <pattern>${sys:log_prefix:-}%d{yyyyMMddHHmmss}|${LOG_CODE}|%-level|%c|%msg%n
                </pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="${ROLLING_INTERVAL}"
                                           modulate="true"/>
            </Policies>
            <!-- 只记录error以上级别信息 -->
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT"
                                 onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

    </appenders>

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
        <logger name="org.mybatis" level="DEBUG"></logger>
        <root level="INFO">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>
</configuration>

标签:xml,log,slf4j,使用,log4j2,log4j
From: https://www.cnblogs.com/aaacarrot/p/16948196.html

相关文章

  • 使用python和sqlite处理数据
    1.处理空行python程序importpandasaspd#导入pandas库data=pd.read_excel("PittsburghBridges.xls")#读取表格数据res=data.dropna(how="all")#清除空白......
  • dos2unix 安装和使用
    dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为rn,而Unix&Linux文件的换行符为n。dos2unix命令其实就是将文件中的rn转换为n......
  • java——mybatis——Mybatis的CRUD——properties标签的使用及细节
         ================================================================================================       PS:此处和配置文件必须保......
  • 如何使用git bash将代码推送到github
    1.准备首先需要现在本地安装好git,同时申请一个github的账号,创建一个新的仓库,如果已经存在了要推送代码的仓库则不需要创建。我这里是新创建了一个仓库:2.步骤2.1.在要......
  • 使用Kernel 2.6版本的Linux系统运行dbca创建数据库实例时报错ORA-27125
    问题描述:使用Kernel2.6版本的Linux系统运行dbca创建数据库实例时报错ORA-27125,如下所示:系统:rhel6.564位数据库:oracle10.2.0.164位异常原因:该异常与linuxhugetlb有关.......
  • java——mybatis——Mybatis的CRUD——使用实体类的包装对象作为查询条件
                         ......
  • harbor镜像仓库的使用
    由于registry镜像仓库存在缺乏认证机制、缺乏镜像管理机制等缺点,因此多使用harbor搭建镜像仓库1.环境准备:需要安装docker以及docker-compose2.下载harbor安装包,解压。这里用......
  • STL-string的使用
    [TOC]一.string初识1.STL简介a.STL的组成STL(standardtemplatelibaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的......
  • Nginx map 使用详解
    map指令介绍:map指令是由ngx_http_map_module模块提供的,默认情况下安装nginx都会安装该模块。map的主要作用是创建自定义变量,通过使用nginx的内置变量,去匹配某......
  • 使用Kafka Assistant监控Kafka关键指标
    使用KafkaAssistant监控Kafka关键指标使用Kafka时,我们比较关心下面这些常见指标。KafkaAssistant下载地址:​​http://www.redisant.cn/ka​​broker度量指标活跃控制器数......