springmvc+logback项目日志配置

  最近在做项目的时候用到logback作为项目日志,而抛弃了log4j。具体为什么用logback,我总结了以下几点:

  1.log4j和logback的创作者是同一个人,logback是log4j的升级版,是对log4j核心的一个封装。

  2.性能提升,在某些特定场景上执行速度提升10倍以上,同时初始化内存更小

  3.扩展文档,丰富的并且详细的文档和不断的更新,可在官网上查看

  4.Filters(过滤器),过滤器的使用又是logback的一大特色,在使用log4j的时候,当我们遇到问题时,我们需要降低日志等级,但这时又会有大量的日志输出。但logback可以根据用户设定不同的日志级别,比如一个用户的日志级别时debug,其他的用户可以时error,这里要了解MDCFilter

  5.日志自动清除和日志自动压缩,自动清除通过设置TimeBasedRollingPolicy 或者 SizeAndTimeBasedFNATP的 maxHistory 属性,自动压缩RollingFileAppender可以在回滚操作中,自动压缩归档日志文件,回滚是异步的

  6.自动载入配置文件,Logback-classic可以在配置文件被修改后,自动重新载入

  上面做的是理论的介绍,现在我们就通过具体的实例来使用logback框架

  1.配置maven依赖

  ch.qos.logback

  logback-core

  1.1.5

  ch.qos.logback

  logback-classic

  1.1.5

  org.logback-extensions

  logback-ext-spring

  0.1.3

  ch.qos.logback

  logback-classic

  org.slf4j

  slf4j-api

  1.7.5

  org.slf4j

  slf4j-simple

  1.7.5

  注意事项:配置了logback的jar包后,一定不要再配置log4j的jar包,因为这样会发生冲突,有可能导致输出的日志文件中没有内容,如果其他的jar包中包含的有log4j的jar包我们要exclusion,比如我们引入的shiro依赖

  org.apache.shiro

  shiro-core

  org.slf4j

  slf4j-api

  1.2.2

  2.配置文件

  首先在web.xml中配置,用于加载logback.xml和过滤

  log4jConfigLocation

  classpath:logback.xml

  ch.qos.logback.ext.spring.web.LogbackConfigListener

  注意:一定要有listener,要不logback不生效,还有logback一定要放在rescore文件夹下,要是放在webapp下会加载不到

  

  3.配置logback.xml

  logback

  %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger:%-3L) - %cyan(%msg%n)

  ${CONSOLE_LOG_PATH}/neoinfo.log

  INFO

  DENY

  ACCEPT

  ${CONSOLE_LOG_PATTERN}

  UTF-8

  true

  false

  ${CONSOLE_LOG_PATH}/neoinfo.%d.log

  15

  10GB

  ${CONSOLE_LOG_PATH}/neoinfo_error.log

  ERROR

  ${CONSOLE_LOG_PATTERN}

  UTF-8

  false

  false

  ${CONSOLE_LOG_PATH}/neoinfo_error.%d.log

  15

  10GB

  4.配置aop类

  package com.aop;

  import com.fasterxml.jackson.databind.ObjectMapper;

  import org.apache.shiro.SecurityUtils;

  import org.apache.shiro.session.Session;

  import org.aspectj.lang.JoinPoint;

  import org.aspectj.lang.annotation.AfterReturning;

  import org.aspectj.lang.annotation.Aspect;

  import org.aspectj.lang.annotation.Before;

  import org.aspectj.lang.annotation.Pointcut;

  import org.slf4j.Logger;

  import org.slf4j.LoggerFactory;

  import org.slf4j.MDC;

  import org.springframework.stereotype.Component;

  import org.springframework.web.context.request.RequestContextHolder;

  import org.springframework.web.context.request.ServletRequestAttributes;

  import javax.servlet.http.HttpServletRequest;

  import java.text.SimpleDateFormat;

  import java.util.Date;

  import java.util.Enumeration;

  import java.util.UUID;

  /**郑州妇科医院哪家好 http://fk.zyfuke.com/

  * 日志输出

  * */

  @Aspect

  @Component

  public class LogAspect {

  private static Logger log = LoggerFactory.getLogger(LogAspect.class);

  @Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping) || @annotation(org.springframework.web.bind.annotation.GetMapping) || @annotation(org.springframework.web.bind.annotation.PostMapping)")

  public void webLogs() {

  }

  @Before("webLogs()")

  public void doBefore(JoinPoint joinPoint) {

  // 接收到请求,记录请求内容

  ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

  HttpServletRequest request = attributes.getRequest();

  // 记录下请求内容

  log.info("DATE:"+new Date());

  log.info("URL : " + request.getRequestURL().toString());

  log.info("HTTP_METHOD : " + request.getMethod());

  log.info("IP : " + request.getRemoteAddr());

  log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());

  Enumeration enu = request.getParameterNames();

  while (enu.hasMoreElements()) {

  String name = (String) enu.nextElement();

  log.info("name:{" + name + "},value:{" + request.getParameter(name) + "}");

  }

  }

  @AfterReturning(returning = "ret", pointcut = "webLogs()")

  public void doAfterReturning(JoinPoint joinPoint, Object ret) throws Throwable {

  ObjectMapper mapper = new ObjectMapper();

  mapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));

  try {

  if (log.isDebugEnabled()) {

  log.debug("returnValue={}", mapper.writeValueAsString(ret));

  }

  } catch (Exception ex) {

  log.error("拦截器异常", ex);

  }

  }

  }

原文地址:https://www.cnblogs.com/gnz49/p/12084403.html

时间: 2024-08-06 01:21:40

springmvc+logback项目日志配置的相关文章

logback条件日志配置

logback支持条件日志配置,支持在测试环境和正式环境使用不同的参数启用不同的日志配置,从而避免手动修改日志配置文件.项目除了引入logback的包以外,还需要引入构件org.codehaus.janino:janino:2.6.1. logback.xml主要内容: 行14:isDefined判断属性是否已定义,-Dlogserver会启用SOCKET日志配置 行29:-Dlogfile启用FILE日志配置,-Dlogfile=/var/log/app.log自定义日志文件 行48:-Dlo

springmvc+logback项目的日志搭建

一.重写HTMLLayout 两个自定义类:LzhHTMLLayoutBase和LzhHTMLLayout LzhHTMLLayoutBase代码如下: package top.liaozhenghan.logback.study.layout; import static ch.qos.logback.core.CoreConstants.LINE_SEPARATOR; import java.util.Date; import java.util.HashMap; import java.u

IDEA项目搭建九——使用slf4j和logback进行日志记录

.简介 java里面日志分为两部分一个门面.一个实现,我们所熟知的SLF4j.Log4j.Log4j2.Logback的日志组件slf4j是门面提供的统一的入口,具体实现由log4j.log4j2.logback来实现 log4j由于太老作者自己也不打算重构了所以放弃 log4j2是apach的一个项目很好,但支持上面略有欠缺所以放弃 logback是之前log4j的作者自己开源的一个新的log组件,做了大量的调整及优化,性能及使用性上都有很大的提高,再加上沉淀了很多年又完全实现了slf4j,所

SpringBoot整合+logback日志配置

本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h

在Spring的项目中配置Log4j存放日志文件到指定目录下

在Spring中使用LOG4J为日志输出的插件已有一段日子了,但有时候发现日志文件虽然是已经在根据自己的理想存放了,但还会有些莫名其妙的项目日志文件出现tomcat内(因为项目的日志文件都以项目命名嘛,所以比较容易区分这些log).这些令我纠结的日志文件,让我在改善一下LOG4J的配置.才发现,之前用的配置方式真是弱爆了. 1.先说自己比较理想的存放日志路径. 我比较喜欢把日志文件放在项目的WEB-INF下,然后当然有个文件夹叫logs.logs相信很多人都会存在在这样的目录下,但放在WEB-I

springboot日志配置Logback

springboot可以通过application.yml或者application.properties中配置如下属性指定日志配置 #logback日志配置xml存放路径配置logging.config=classpath:logback.xml#日志文件存储位置logging.path=/workspace/rock/jpa-test/log logback.xml日志结构 <configuration> <!-- 日志输出根配置 --> <root level=&quo

spring boot logback 日志配置

文件名为: logback-spring.xml, 放在resources的根目录下,日志配置内容如下: <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志路径,可以读取application.yml文件的具体配置 --> <springProperty scope="context" name="LOG_DIR"

Maven搭建SpringMVC+Mybatis项目详解【转】

前言 最近比较闲,复习搭建一下项目,这次主要使用Spring+SpringMVC+Mybatis.项目持久层使用Mybatis3,控制层使用SpringMVC4.1,使用Spring4.1管理控制器,数据库连接池使用druid数据源,该项数据库暂使用MySQL. 1. 数据库表结构以及maven项目结构 数据表非常的简单(不是重点),如下: 创建maven项目创建Maven Project时,将Filter选择为org.apache.maven.archetypes.填写完相关项目坐标信息后项目

Maven搭建SpringMVC+Mybatis项目详解

前言 最近比较闲,复习搭建一下项目,这次主要使用Spring+SpringMVC+Mybatis.项目持久层使用Mybatis3,控制层使用SpringMVC4.1,使用Spring4.1管理控制器,数据库连接池使用druid数据源,该项数据库暂使用MySQL. 1. 数据库表结构以及maven项目结构 数据表非常的简单(不是重点),如下: 创建maven项目,详细见上一篇maven创建(http://blog.csdn.net/fengshizty/article/details/430195