SpringBoot项目 logback指定类的日志到指定路径
需求:
需要将请求的用户设备信息记录到一个日志文件,这个日志格式是一个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+"\"}"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了