日志处理方案

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 环境:springboot日志:logback可以实现不同业务的日志在不同文件里存放依赖 org.springframework.boot spring-boot-starter-logging自定义配置在resources目录下建立logback-spring.

环境:springboot
日志:logback
可以实现不同业务的日志在不同文件里存放

依赖

<!-- 日志模块 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

自定义配置

  • 在resources目录下建立logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- logback 自定义配置
        适用于复杂场景下的日志生成
        参考:https://blog.csdn.net/Inke88/article/details/75007649
        -->
<configuration debug="false">

    <!-- 通过${}来调用变量 -->
    <property name="logback.logdir" value="/Users/spz/etc/log/shiroStudyDemo"/>

    <!-- 系统日志 - 输出到文件 -->
    <appender name="systemLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志名称 -->
        <File>${logback.logdir}/system.log</File>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${logback.logdir}/system.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--只保留最近90天的日志-->
            <maxHistory>90</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d [%thread] [%-5level] [%file-%line] - %msg%n</pattern>
        </encoder>

    </appender>

    <!-- 用户操作日志 - 输出到文件 -->
    <appender name="userLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志名称 -->
        <File>${logback.logdir}/user.log</File>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${logback.logdir}/user.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--只保留最近90天的日志-->
            <maxHistory>90</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d [%thread] [%-5level] [%logger{36}] [%line] - %msg%n</pattern>
        </encoder>

    </appender>

    <!-- 控制台日志 -->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <!--展示格式 layout-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d [%thread] [%-5level] [%file-%line] - %msg%n</pattern>
        </layout>
    </appender>

    <!-- 不同日志输出到不同文件夹
            使用时,先创建:private final static Logger log = LoggerFactory.getLogger("SYSTEM_LOG");
            -->
    <logger name="SYSTEM_LOG" additivity="false" level="INFO">
        <appender-ref ref="systemLog"/>
    </logger>
    <logger name="USER_LOG" additivity="false" level="INFO">
        <appender-ref ref="userLog"/>
    </logger>
    <logger name="CONSOLE_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>

    <root level="info">
        <appender-ref ref="systemLog" />
        <appender-ref ref="consoleLog" />
        <appender-ref ref="userLog" />
    </root>

</configuration>

使用

使用前需要创建实例

private final static Logger log = LoggerFactory.getLogger("SYSTEM_LOG");

然后直接使用

log.info("xxxx");
log.error("xxxx");

开发时和发布时配置

开发时,可以将logback-spring.xml里的

<logger name="SYSTEM_LOG" additivity="false" level="INFO">
        <appender-ref ref="systemLog"/>
    </logger>
    <logger name="USER_LOG" additivity="false" level="INFO">
        <appender-ref ref="userLog"/>
    </logger>
    <logger name="CONSOLE_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>

配置为

<logger name="SYSTEM_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>
    <logger name="USER_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>
    <logger name="CONSOLE_LOG" additivity="false" level="INFO">
        <appender-ref ref="consoleLog"/>
    </logger>

这样不需要改动代码,所有日志都会输出到控制台,便于开发。
而在发布时,只需要改回来即可,日志将输出到文件,非常方便。

结合lombok使用

lombok安装办法百度有,lombok有个注解@Slf4j(topic = "loggerName"),在类上加上这个注解,相当于这行代码:

private final static Logger log = LoggerFactory.getLogger("loggerName");

也很方便

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
运维 安全 API
统一接入API赋能开发者:自动高效、灵活编排的云产品日志采集方案
随着企业对网络安全和数据安全防护水平要求的逐步提升,企业管理对企业生产运维过程中所产生的日志数据,在留存处理、权限隔离、跨境合规、数据汇总等方面提出了更高阶的需求。为了满足大客户及一些国际化客户安全合规、简单快速地接入日志、使用日志、操作日志,我们提出了一种新的解决方案——“云产品统一接入API”。统一接入API主要针对阿里云云产品日志类型,以API的方式提供企业或组织用户快速上手,编排灵活的日志采集方案。
|
4月前
|
存储 监控 Serverless
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
|
1月前
|
消息中间件 存储 监控
微服务日志监控的挑战及应对方案
【10月更文挑战第23天】微服务化带来模块独立与快速扩展,但也使得日志监控复杂。日志作用包括业务记录、异常追踪和性能定位。
|
3月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
7月前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
4月前
|
Java 编译器 数据库
异步日志方案——spdlog
异步日志方案——spdlog
|
4月前
|
存储 Prometheus Kubernetes
在K8S中,如何收集K8S日志?有哪些方案?
在K8S中,如何收集K8S日志?有哪些方案?
|
4月前
|
存储 Kubernetes Java
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
|
5月前
|
Java API Apache
通用快照方案问题之Feign对日志的记录如何解决
通用快照方案问题之Feign对日志的记录如何解决
31 0
|
5月前
|
存储 运维 监控
在Spring Boot中集成分布式日志收集方案
在Spring Boot中集成分布式日志收集方案