美文网首页SpringBoot之路JHipster
Spring boot &JHipster日志处理

Spring boot &JHipster日志处理

作者: starteasy | 来源:发表于2016-11-09 22:31 被阅读858次

    日志对于应用程序来说是非常重要的,Spring框架本身集成了不少其他工具,我们自身的应用也会使用到第三方库,所以我们推荐在Spring应用中使用SLF4J/Logback来记录日志。

    SLF4J与Logback简介

    SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logging,log4j,logback,commons-logging, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。

    Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

    Spring Boot Logging

    Spring Boot实现了一套日志系统——它能够根据类路径上的内容来决定使用哪一种日志框架,logback是最优先的选择。配置了logback.xml可以利用Spring Boot提供的默认日志配置:

    这样就定义了一个捕获org.springframework.web的日志,日志级别是DEBUG,base.xml内容如下:

    Spring Boot的日志系统预先定义了一些系统变量:

    ${PID},当前进程ID

    ${LOG_FILE},Spring Boot配置文件中logging.file的值

    ${LOG_PATH}, Spring Boot配置文件中logging.path的值

    同时默认情况下包含另个appender——一个是控制台,一个是文件,分别定义在console-appender.xml和file-appender.xml中。同时对于应用的日志级别也可以通过application.properties进行定义:

    logging.level.org.springframework.web=DEBUG

    logging.level.org.hibernate=ERROR

    这等价于在logback.xml配置appender的日志级别。

    ConsoleAppender

    Logback使用appender来定义日志输出,在开发过程中最常用的是将日志输出到控制台:

    .%d{HH:mm:ss.SSS} [%thread]%-5level%logger{36}-%msg%nTRACE

    表示对日志进行编码:

    %d{HH:mm:ss.SSS}——日志输出时间

    %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用

    %-5level——日志级别,并且使用5个字符靠左对齐

    %logger{36}——日志输出者的名字

    %msg——日志消息

    %n——平台的换行符

    在这种格式下一条日志的输出结果如下:

    0:12:51.012[qtp231719230-45]DEBUGo.c.d.r.util.LoggingResponseFilter

    RollingFileAppender

    另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:

    /data/log/app.logrest-demo.%d{yyyy-MM-dd}.log30%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n

    其中重要的是rollingPolicy的定义,上例中rest-demo.%d{yyyy-MM-dd}.log定义了日志的切分方式——把每一天的日志归档到一个文件中,30表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式。

    JHipster 是这么处理的, 每个JHipster应用都会生成 logback-spring.xml, 其中logLevel的默认值 会根据不同的环境而不同(一般 开发环境默认 debug;线上环境默认info),JHipster的log文件配置如:

    level="#logback.loglevel#"

    这个变量值的替换是gradle去做的处理,具体代码见 根目录的build.gradle,如:

    if(project.hasProperty('prod')) {

    applyfrom:'gradle/profile_prod.gradle'

    }else{

    applyfrom:'gradle/profile_dev.gradle'
    }

    profile_dev.gradle  的配置:

    ext{

    logbackLoglevel ="DEBUG"

    }

    logging.path 的配置, 比较好的设置方式 是 固定在 服务器一个特定路径下,这样运维方便。也不要和容器一个目录下,避免部署 误删除。

    相关文章

      网友评论

        本文标题:Spring boot &JHipster日志处理

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