日志处理方案

作者: 后端技术学习分享 | 来源:发表于2018-08-07 11:31 被阅读15次

环境: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");

也很方便

相关文章

  • 日志处理方案

    环境:springboot日志:logback可以实现不同业务的日志在不同文件里存放 依赖 自定义配置 在reso...

  • 日志系统架构介绍(非原创)

    文章大纲 一、日志系统概念介绍二、ELK日志系统介绍三、互联网行业日志处理方案介绍四、参考文章 一、日志系统概念介...

  • 从一份定义文件详解ELK中Logstash插件结构

    概述 当下分布式系统的 日志收集、日志分析、日志处理、可视化 的热门技术栈方案当然非 ELK(ElasticSea...

  • 33、Oracle错误问题(ORA-03113)

    在执行一条sql时出现了如下问题: 处理方案网上找了一下日志,说是备份日志满了的原因; 通过以下方法看了下错误日志...

  • docker 容器日志清理方案

    本文为转载,原文:docker 容器日志清理方案 docker容器日志清理方案 找出容器日志 在linux上,容器...

  • 日志聚合和可视化

    标签(空格分隔): 架构 日志 聚合 一、背景需求&常见方案 1、日志分类和作用 2、传统日志管理方案&存在的问题...

  • 2.阿里大数据——日志采集

    Aplus.JS:是web端日志采集技术方案 UserTrack:APP端日志采集技术方案 一、浏览器的页面日志采...

  • 大数据入门学习

    常用处理方案 对于大量数据的处理方案:大量数据处理。 对于高并发的处理方案:高并发处理。 ============...

  • 无标题文章

    Java日志处理问题? Java中日志处理,用了druid和log4j处理日志,druid对项目进行监控,通过lo...

  • kubesphere部署minio失败

    报错日志 解决方案

网友评论

    本文标题:日志处理方案

    本文链接:https://www.haomeiwen.com/subject/tfpovftx.html