springboot整合log4j

一、默认名log4j2-spring.xml,就省下了在application.yml中配置

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

<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
<File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
  <PatternLayout pattern="${LOG_PATTERN}"/>
</File>

<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
  <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
  <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
  <PatternLayout pattern="${LOG_PATTERN}"/>
  <Policies>
    <!--interval属性用来指定多久滚动一次,默认是1 hour-->
    <TimeBasedTriggeringPolicy interval="1"/>
    <SizeBasedTriggeringPolicy size="10MB"/>
  </Policies>
  <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
  <DefaultRolloverStrategy max="15"/>
</RollingFile>

<!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
  <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
  <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
  <PatternLayout pattern="${LOG_PATTERN}"/>
  <Policies>
    <!--interval属性用来指定多久滚动一次,默认是1 hour-->
    <TimeBasedTriggeringPolicy interval="1"/>
    <SizeBasedTriggeringPolicy size="10MB"/>
  </Policies>
  <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
  <DefaultRolloverStrategy max="15"/>
</RollingFile>

<!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
  <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
  <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
  <PatternLayout pattern="${LOG_PATTERN}"/>
  <Policies>
    <!--interval属性用来指定多久滚动一次,默认是1 hour-->
    <TimeBasedTriggeringPolicy interval="1"/>
    <SizeBasedTriggeringPolicy size="10MB"/>
  </Policies>
  <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
  <DefaultRolloverStrategy max="15"/>
</RollingFile>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.mybatis" level="info" additivity="false">
  <AppenderRef ref="Console"/>
</logger>
<!--监控系统信息-->
<!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
<Logger name="org.springframework" level="info" additivity="false">
  <AppenderRef ref="Console"/>
</Logger>

<root level="info">
  <appender-ref ref="Console"/>
  <appender-ref ref="Filelog"/>
  <appender-ref ref="RollingFileInfo"/>
  <appender-ref ref="RollingFileWarn"/>
  <appender-ref ref="RollingFileError"/>
</root>

二、使用方法1

        public class LogExampleOther {
               private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExampleOther.class);

                public static void main(String... args) {
                  log.error("Something else is wrong here");
                }
        }

三、使用方法2:使用lombok后下面的代码等效于上述的代码

  @Slf4j
  public class LogExampleOther {
        public static void main(String... args) {
              log.error("Something else is wrong here");
        }
  }

四、使用AOP统一处理Web请求日志

  @Component
  @Aspect
  @Slf4j
  public class WebLogAspect {

         @Pointcut("execution(public * cn.itcast.account.controller.*.*(..))")
         public void webLog() {
         }

      @Before("webLog()")
      public void doBefore(JoinPoint joinPoint) throws Throwable {
                // 接收到请求,记录请求内容
                ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                HttpServletRequest request = attributes.getRequest();
                // 记录下请求内容
                log.info("URL : " + request.getRequestURL().toString());
                log.info("HTTP_METHOD : " + request.getMethod());
                log.info("IP : " + request.getRemoteAddr());
                Enumeration<String> enu = request.getParameterNames();
                while (enu.hasMoreElements()) {
                      String name = (String) enu.nextElement();
                      log.info("name:{},value:{}", name, request.getParameter(name));
                }
        }

      @AfterReturning(returning = "ret", pointcut = "webLog()")
      public void doAfterReturning(Object ret) throws Throwable {
                // 处理完请求,返回内容
                log.info("RESPONSE : " + ret);
      }

  }
posted @ 2020-08-30 01:57  jock_javaEE  阅读(205)  评论(0编辑  收藏  举报