首页 > 编程语言 > 详细

SpringBoot项目 logback指定类的日志到指定路径

时间:2020-07-03 12:42:36      阅读:328      评论:0      收藏:0      [点我收藏+]

需求:

  需要将请求的用户设备信息记录到一个日志文件,这个日志格式是一个json,但是因为数据中心后期会在此路径获取日志信息并处理,所以不能与其他日志放到一个文件里面,所以这个路径必须只打印指定内容有格式

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <springProperty scope="context" name="LOG_PATH" source="logback.file"/>
    <springProperty scope="context" name="LOG_NAME" source="spring.application.name"/>
  <!-- 第一个appender,此配置是打印所有的info级别的日志-->
    <appender name="application-service" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${LOG_NAME}-service.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${LOG_NAME}-service.%d{yyyyMMdd}.%i</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <maxHistory>300</maxHistory>
            <!-- 日志归档总大小超过这个数字会删除之前老的  -->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d [%t] %-5p %c[%line] - %m%n</pattern>
        </encoder>
    </appender>
  <!-- 第二个appender, 此配置就是这次要单独打印的info级别日志,
     注:此配置和第一个appender几乎是一样的,只是日志存放路径不一样--> <appender name="application-userinfo-service" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${LOG_NAME}-userinfo-service.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${LOG_NAME}-userinfo.%d{yyyyMMdd}.%i</fileNamePattern> <maxFileSize>500MB</maxFileSize> <maxHistory>300</maxHistory> <!-- 日志归档总大小超过这个数字会删除之前老的 --> <!-- <totalSizeCap>10GB</totalSizeCap>--> </rollingPolicy> <encoder> <pattern>%d [%t] %-5p %c[%line] - %m%n</pattern> </encoder> </appender> <!-- 第三个appender 非主要配置,打印error错误级别日志--> <appender name="application-error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${LOG_NAME}-error.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${LOG_NAME}-error.log.%d{yyyy-MM-dd}.%i</fileNamePattern> <maxFileSize>500MB</maxFileSize> <maxHistory>300</maxHistory> <!-- 日志归档总大小超过这个数字会删除之前老的 --> <totalSizeCap>10GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d [%t] %-5p %c[%line] - %m%n</pattern> </encoder> </appender> <!-- logger配置 name=自定义 起一个logger名字,自定义,
            level=日志级别,
            additivity=若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出,
   -->
  <logger name="userinfolog" level="INFO" additivity="true">
    <appender-ref ref="application-userinfo-service" />
  </logger>
  <root level="INFO">
    <appender-ref ref="application-service" />
    <appender-ref ref="application-error" />
  </root>
</configuration>

 下面在类里面配置要使用的logger name

package com.xiaomi.life.platform.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xiaomi.life.platform.thrift.service.UserInfo;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * @Author weiranliu
 * @Email liuweiran12138@outlook.com
 * @Date 2020/7/2   6:18 下午
 * @Version 1.0
 */
@Service
public class UserInfoInputServiceImpl {
  //注:将刚才配置的logger name="userinfolog"配置到此处,这样在这个类里面所有的log.info()内容都会被打印到和其他info级别不在一个路径的文件
    private Logger log = LoggerFactory.getLogger("userinfolog");
    /**
     * 处理userinfo设备以为id
     * @param userinfo
     */
    public void Input(UserInfo userinfo){
        if (userinfo != null){
            String original = userinfo.getOaid();
            Integer digit = null;
            try {
                digit = Integer.valueOf(original.substring(0, 1));
            } catch (NumberFormatException e) {
                log.info("UserInfo lose original OAID:"+original);
                e.printStackTrace();
            }
            String oaid = original.substring(1,original.length()-digit);
            if (oaid == null){
                JSONObject jsonObject = JSON.parseObject("{\"originalOAID\":"+original+"\",\"OAID\":"+oaid+"\"}");
                log.info("UserInfo lose, original OAID:"+oaid);
            }
            log.info("{\"originalOAID\":"+original+"\",\"OAID\":"+oaid+"\"}");
        }
    }

 

SpringBoot项目 logback指定类的日志到指定路径

原文:https://www.cnblogs.com/ried12138/p/13229179.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!