最近在别人基础上写代码,但是发现一个框架中写了好多日志输出的配置文件,比如logback-dev.xml,logback-beta.xml,logback-prod.xml,其实总结起来就是 除了日志输出目录不同外,其余的全部相同。于是呼我就开始了优化。思想如下:

1.springboot项目默认便是logback日志框架,默认配置文件是logback-spring.xml【优点:该名称日志文件,是默认加载的,不用配置logging.config属性,且加载顺序是在属性配置文件之后加载,也就是说,logback-spring.xml 可以读取到 application.yml文件中的属性】

2.所有日志配置文件用logback-spring.xml文件接受,日志输出目录作为变量传入即可。

然,所有的成功绝非一蹴而就,启动的时候总是在当前目录的根目录下自动生成一个目录:LOG_PATH_IS_UNDEFINED

以前玩那么多遍了,今天却栽了跟头,虽然不影响功能,但是“莫名其妙”多增加了一个日志目录心里还是不舒服的。凭着一股子牛劲,研究吧。

1.新搭建一个干净的框架,发现功能好使,没有额外目录生成。--》结论:maven不知引用了某个依赖,所以导致日志配置文件加载顺序在属性文件之前启动了。
2.回想最近新增的依赖,开始逐个删除,并反复测试日志输出,最后在移除spring-cloud-starter-netflix-eureka-client依赖时,日志输出正常。--》结论:eureka影响了logback-spring日志文件
3.向度娘请教,最后发现springcloud优先加载bootstrap.properties/bootstrap.yml,因为我没有该配置文件,找不到我定义的日志输出目录参数,所以日志配置文件先生成了默认的日志目录以及 默认文件。
4.思考:为什么没有bootstrap.yml文件时,会生成一个默认LOG_PATH_IS_UNDEFINED,而其后还会生成我指定的日志输出目录和文件呢?我理解的是不会再生成我指定的目录了

<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_PATH}/${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <cleanHistoryOnStart>${LOG_FILE_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
            <fileNamePattern>${LOG_PATH}/${ROLLING_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-7}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-0}</totalSizeCap>
        </rollingPolicy>
    </appender>
    <logger name="org.springframework" level="error" additivity="false"/>
    <logger name="org.hibernate" level="error" additivity="false"/>
    <logger name="com.mchange" level="error" additivity="false"/>
    <logger name="org.apache" level="error" additivity="false"/>
    <logger name="net.sf" level="error" additivity="false"/>
    <springProfile name="dev | test">
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </root>
    </springProfile>
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="FILE" />
        </root>
    </springProfile>
</configuration>
logging.
  path: /usr/logs
  file: test.log
最近在别人基础上写代码,但是发现一个框架中写了好多日志输出的配置文件,比如logback-dev.xml,logback-beta.xml,logback-prod.xml,其实总结起来就是 除了日志输出目录不同外,其余的全部相同。于是呼我就开始了优化。思想如下:1.springboot项目默认便是logback日志框架,默认配置文件是logback-spring.xml【优点:该名称日志文件,是默认加载的,不用配置logging.config属性,且加载顺序是在属性配置文件之后加载,也就是说,logb
springboot logback 的源码分析请参考这篇,讲的很好:https://juejin.im/post/5cd0cdcc6fb9a0323120a3f4 一、日志常规配置 直接贴出 logback - spring .xml,基本满足了对日志的常规需求: 1、控制台日志(带颜色显示) 2、全部日志文件(包括全别日志级别的日志,每天一个,自动压缩) 3、错误日志文件(仅抽取ERROR级别日志,每天一个,自动压缩) a. 日志存放目录需要在application.yml中配置:logging.
springboot 本身集成了 logback ,所以无需引入依赖; 在resources下建立 logback .xml文件,内容如下 <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" sc...
对于不使用 Spring Cloud Context 的 Spring Cloud 程序,最好把 Spring Cloud Context 禁用掉,因为如果不禁用的话会导致某些配置 加载 出错。禁用方法: 在 SpringBoot 主函数加上 System.setProperty(" spring .cloud.bootstrap.enabled", "false"); 这句代码,示例如下: 最近在项目中对服务器磁盘读写性能做了一个测试,发现服务器性能实在太差了,写入速度一般在13-15M/s的范围,速度太小了 因为这个是新项目来的,想着提高服务性能,减少磁盘io,因此,准备对项目日志进行改造,改为异步写入磁盘 基于 springcloud alibaba,版本如下: < spring -boot.version>2.2.10.RELEASE</ spring -boot.version> < spring -cloud.versio
1、首先在bootstrap.yml文件添加如下配置: logging.config: classpath: logback - spring .xml //配置各个环境使用的log配置文件 logback .path: /home/work/logs //配置相应的环境log打印路径 2、不同环境动态配置日志路径和级别 动态配置日志打印路径:使用 spring Property属性,source配置对应的yml文件的配置 < spring Property scope="context" na
原来的日志在服务器上采用的是cronolog组件按天分割的日志,没什么大问题,因为本地也就控制台看下;到服务端才需要正在的日志文件来核查问题。但是介于 spring 本来自带不用,用第三方的插件太麻烦(测试嫌麻烦)。所以优化源代码采用 logback - spring .xml的配置来打日志。 直接上代码: 对应pom &lt;dependency&gt; &lt;!-- logbac......