slf4j结合spring AOP配置

1 篇文章 0 订阅
1 篇文章 0 订阅

  近期开发的项目中使用slf4j打印日志,要求按天打印,并且要打印用户ID和sessionID,另由于项目框架集成了spring作为service层的实现框架,又要求实现打印所有service层方法执行的开始和结束信息到另外的文件中。前者实现较为普通,网上各种现成的,后者需要借助于slf4j的表达式进行过滤,约定命名规则后开始定义配置文件。

<!DOCTYPE logback>
<configuration>

  <property name="LOG_HOME" value="D:\logs" />  // 设定日志文件输出文件夹路径 

  // 控制台输出

  <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> // 开发期间用于控制台输出,%X表示要从MDC中获取指定参数
    <target>System.out</target>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <Pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} %5p [userId=%X{userId}] [sessionId=%X{sessionId}] %c{n} %m \(%F@%L\)%n</Pattern>
    </encoder>
  </appender>

  // 业务层监察日志输出

  <appender name="audit" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Encoding>UTF-8</Encoding>
      <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator>
          <expression>throwable == null &amp;&amp;logger.contains("ServiceImpl")</expression> // 只接受无异常并且包含ServiceImpl关键字的信息
        </evaluator>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
      </filter>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${LOG_HOME}\audit_%d{yyyyMMdd}.log</FileNamePattern> // 打印到专用的文件
        <MaxHistory>30</MaxHistory>
      </rollingPolicy>
      <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} %5p [userId=%X{userId}] [sessionId=%X{sessionId}] %c{n} %m \(%F@%L\)%n</pattern>
      </layout>
  </appender>

  // 数据库操作层日志输出

  <appender name="web" class="ch.qos.logback.core.rolling.RollingFileAppender"> // 主要打印执行的SQL
    <Encoding>UTF-8</Encoding>
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
      <evaluator>
        <expression>logger.contains("ServiceImpl")</expression> // 屏蔽业务层日志信息
       </evaluator>
       <OnMatch>DENY</OnMatch>
       <OnMismatch>ACCEPT</OnMismatch>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <FileNamePattern>${LOG_HOME}\web_%d{yyyyMMdd}.log</FileNamePattern>
      <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} %5p [userId=%X{userId}] [sessionId=%X{sessionId}] %c{n} %m \(%F@%L\)%n</pattern>
    </layout>
  </appender>

  // 对象包及日志级别

  <logger name="com.slf4j" level="info">
  </logger>

  // root定义

  <root level="info">
    <appender-ref ref="console" />
    <appender-ref ref="audit" />
    <appender-ref ref="web" />
  </root>

</configuration>

业务层AOP类方法:

public void start(JoinPoint point) { // 方法开始时打印start

        Logger logger = LoggerFactory.getLogger(point.getTarget().getClass().getName() + StringConstant.POINT + point.getSignature().getName());

        logger.info(" ==> Start");
    }

public void end(JoinPoint point) { // 方法结束时打印end

        Logger logger = LoggerFactory.getLogger(point.getTarget().getClass().getName() + StringConstant.POINT + point.getSignature().getName());

        logger.info(" ==> End");
    }

   日志头格式:

   2014/05/14 16:18:17.224  INFO [userId=A00010] [sessionId=230E98674350A5750EC8FD6EF2204E1B] com.slf4j.......................

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值