log4j 2_程序日志_监控程序运行状态

2015年5月停止了对于log4j的更新。

log4j 2的配置文件不再支持properties文件格式,推荐使用xml文件配置。

 


 一、日志级别

  fatal:致命错误,在catch块中使用。

  error:异常错误,在catch块中使用。

  warn:警告,在需要警告的地方使用。

  info:信息(方法级别),在调用方法的位置使用。

  debug:调试(代码级别),在方法内部使用。

<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

二、使用步骤

1、导入jar包:

  

2、编写配置文件:

    在CLASSPATH目录(src)下创建配置文件log4j2.xml。

3、通过LogManager.getLogger()获取Logger对象,调用对应方法进行打印。


 

配置文件结构:

<!--根节点,可以设置默认输出级别,自动更新配置文件频率-->
<configuration>

    <!--输出位置-->
    <appenders>
         <console></console>
         <File></File>
         <RollingFile></RollingFile>
    </appenders>

    <!--具体的输出对象-->
    <Loggers>
         <root></root>
         <Logger></Logger>
    </Loggers>

</configuration>        

例子:

        实现了在控制台、指定文件、指定文件夹下输出日志,在文件夹中最多存在5个日志文件,每个文件大小为10mb。

<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration根节点
    status:这个用于设置默认输出的最小级别。
    monitorInterval:自动检测修改配置文件和重新配置的间隔秒数。-->
<configuration status="WARN" monitorInterval="30">
    <!--appenders节点:日志信息输出目的地-->
    <appenders>
        <!--console节点,控制台输出日志:
            name:名字
            target:输出地点-->
        <console name="Console" target="SYSTEM_OUT">
            <!--PatternLayout节点,输出日志的格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %class{36} [%M %L] - %msg%xEx%n"/>
        </console>

        <!--File节点,输出日志到文件中:
            name:名字
            fileName:输出地址
            append:是否为追加模式-->
        <File name="log" fileName="d:/fileLog.log" append="true">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %class{36} [%M %L] - %msg%xEx%n"/>
        </File>

        <!--RollingFile节点,输出日志到文件中,可自动新建文件:
            name:名字
            fileName:输出位置
            filePattern:指定新建文件的名称格式。-->
        <RollingFile name="RollingFileInfo" fileName="d:/logs/warn.log"
                     filePattern="d:/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <!--ThresholdFilter节点:设置输出级别
                level:设置基准级别
                onMatch:是否输出基准级别以上的
                onMisMatch:是否输出基准级别以下的-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %class{36} [%M %L] - %msg%xEx%n"/>
            <!--Policies节点,定义新增文件策略-->
            <Policies>
                <!--基于时间的新建策略,默认是1小时新建一个文件-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <!--基于指定大小的新建策略-->
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy节点,设置最大文件数量:
                 max:最大文件数量默认为7,日志数量超过max个会删除之前的日志-->
            <DefaultRolloverStrategy max="5"/>
        </RollingFile>
    </appenders>

    <!--loggers节点,日志对象-->
    <loggers>
        <!--root节点,项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出。
            level:默认的最低的输出级别
            -->
        <root level="all">
            <!--appender-ref节点,选择输出位置-->
            <appender-ref ref="Console"/>
            <appender-ref ref="log"/>
            <appender-ref ref="RollingFileInfo"/>
        </root>

        <!--Logger节点,用来指定为某个包或类的日志
                name:指定该Logger所适用的类或者类所在的包全路径。
                level:输出最低级别.
                additivity:默认为true,会与root日志器重复打印。
                -->
        <Logger name="lurenjia.logj4j" level="debug" additivity="false">
            <appender-ref ref="Console"/>
            <appender-ref ref="log"/>
            <appender-ref ref="RollingFileInfo"/>
        </Logger>
    </loggers>
</configuration>
View Code

测试代码:

package lurenjia.logj4j;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
 * @author lurenjia
 * @date 2022/12/24-22:07
 */
public class Client {
    public static void main(String[] args) {
        Logger logger = LogManager.getLogger();
        int i = 0;
        while(true){
            logger.trace("这是第"+i+"次输出trace信息");
            logger.debug("这是第"+i+"次输出debug信息.");
            logger.info("这是第"+i+"次输出info信息.");
            logger.warn("这是第"+i+"次输出warn信息.");
            logger.error("这是第"+i+"次输出error信息.");
            logger.fatal("这是第"+i+"次输出fatal信息");
            i++;
        }
    }
}

运行结果:

  控制台打印了日志信息,指定文件夹下生成了日志文件。

 

 

posted @ 2022-12-27 17:05  在博客做笔记的路人甲  阅读(67)  评论(0编辑  收藏  举报