springboot配置log4j2,现扒现用,简单易懂

开头

log4j2跟之前版本的区别就不发了,那玩意上网上搜有的是介绍的

这个文章主要是为了那些初学者上网上不好配搞得,直接扒就能用,网上其他文章不是给你讲概念,就是给你配置没发全发一半,有严谨性但是不通俗易懂。

先看下效果图

 

 我这里有两个log,一个是info级别,一个是error级别

springboot配置log4j2,现扒现用,简单易懂_第1张图片

在我的磁盘里会生成两种级别的日志文件,这个文件里就是单独一种级别的,方便以后为了看有哪些error,还得去log里搜。

pom.xml

maven引入 


    org.springframework.boot
    spring-boot-starter-log4j2


    org.springframework.boot
    spring-boot-starter-logging
    
        
            *
            *
        
    

log4j2.xml

在resource下建立文件 ,直接粘贴

springboot配置log4j2,现扒现用,简单易懂_第2张图片

 






    
    
        %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{1}:%L -%m%n
        CeipageServer
        
        E://Ceinet
        
        CeipageServer
    
    
        
            
            
            
            
        
        
        
            
            
            
        
        
        
        
            
            
            
            
                
                
                
                
            
            
            
        
        
        
            
            
            
            
                
                
                
                
            
            
            
        
    
    
        
            
            
            
            
        
    

 这里面的配置我拷了好几个文章然后改吧改吧整合的

 这里注意几个地方,根据自己情况修改

  1. FILE_PATH,这个是日志输出的磁盘路径,这个跟据你以后部署windows还是linux,路径需要搞对
  2. FILE_NAME,这个名不说了,有注释的,就是生成的文件名,肯定换成自己的啊
  3. 里面的console,有个level等级,看你要控制台输出的日志等级了,等级这玩意会生成大于你当前级别的全部级别(OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL),举个例子你写的是error,那么输出的就是off和fatal和error,一般情况都写info
  4. 测试用的,打包后用不上了,这个会在你项目目录里生成日志文件
  5. 这个是主要的,部署后会根据这里面的配置生成log文件,就是我截图那个效果图,一个级别写一个,我这里面只写了INFO和ERROR级别的,需要其他级别的复制一个然后改吧改吧就行
  6. 里面的ref对应上面配置的name,得对应上哦要不然不输出,尤其对应RollingFile的name

LoggerUtil.java

这个是我们自己写的log工具类,发现2代里调用log改成LogManager了。 这里面我们做了调用类的处理,可以不用像以前似的每个类里都得getLogger(XXXX.class)了

这个不一定非得用我们的,自己有封装的更好

package com.cei.utils;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import sun.reflect.Reflection;

import java.util.Date;

public class LoggerUtil {
    private static boolean isLog = true;
    private static Logger logger = null;

    public static void setLogger(boolean isLog) {
        LoggerUtil.isLog = isLog;
    }

    public static void setLog(Logger logger) {
        LoggerUtil.logger = logger;
    }

    public static void setLogger(Logger logger) {
        LoggerUtil.logger = logger;
    }

    public static void debug(Object msg) {
        if (isLog) {
            if (logger == null) {
                StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                if (stackTraceElement.length > 3) {
                    logger = LogManager.getLogger(stackTraceElement[2].getClassName());
                    logger.debug("调用者类名" + stackTraceElement[2].getClassName());
                } else {
                    logger = LogManager.getLogger(Reflection.getCallerClass(2).getName());
                    logger.debug("调用者类名" + Reflection.getCallerClass(2).getName());
                }
            }
            logger.debug(new Date() + " " + msg);
        }

    }

    public static void info(Object msg) {
        if (isLog) {
            if (logger == null) {
                StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                if (stackTraceElement.length > 3) {
                    logger = LogManager.getLogger(stackTraceElement[2].getClassName());
                    logger.debug("调用者类名" + stackTraceElement[2].getClassName());
                } else {
                    logger = LogManager.getLogger(Reflection.getCallerClass(2).getName());
                    logger.debug("调用者类名" + Reflection.getCallerClass(2).getName());
                }
            }
            logger.info(new Date() + " " + msg);
        }
    }

    public static void warn(Object msg) {
        if (isLog) {
            if (logger == null) {
                StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                if (stackTraceElement.length > 3) {
                    logger = LogManager.getLogger(stackTraceElement[2].getClassName());
                    logger.debug("调用者类名" + stackTraceElement[2].getClassName());
                } else {
                    logger = LogManager.getLogger(Reflection.getCallerClass(2).getName());
                    logger.debug("调用者类名" + Reflection.getCallerClass(2).getName());
                }
            }
            logger.warn(new Date() + " " + msg);
        }
    }

    public static void error(Object msg) {
        if (isLog) {
            if (logger == null) {
                StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                if (stackTraceElement.length > 3) {
                    logger = LogManager.getLogger(stackTraceElement[2].getClassName());
                    logger.debug("调用者类名" + stackTraceElement[2].getClassName());
                } else {
                    logger = LogManager.getLogger(Reflection.getCallerClass(2).getName());
                    logger.debug("调用者类名" + Reflection.getCallerClass(2).getName());
                }
            }
            logger.error(new Date() + " " + msg);
        }
    }

    public static void fatal(Object msg) {
        if (isLog) {
            if (logger == null) {
                StackTraceElement[] stackTraceElement = Thread.currentThread().getStackTrace();
                if (stackTraceElement.length > 3) {
                    logger = LogManager.getLogger(stackTraceElement[2].getClassName());
                    logger.debug("调用者类名" + stackTraceElement[2].getClassName());
                } else {
                    logger = LogManager.getLogger(Reflection.getCallerClass(2).getName());
                    logger.debug("调用者类名" + Reflection.getCallerClass(2).getName());
                }
            }
            logger.fatal(new Date() + " " + msg);
        }
    }

}

 还有就是我们是类似抓异常那种线程抓类名,而不是用的这个

springboot配置log4j2,现扒现用,简单易懂_第3张图片

 这个有过时的注解了,不是不能用,但是怕有问题就没用

调用

调用就简单了,上面都配好后 ,随便调

 

你可能感兴趣的:(后端,log4j,java,开发语言)