日志组件可以在 springboot 加载配置文件之前启动吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
luxinfl
V2EX    程序员

日志组件可以在 springboot 加载配置文件之前启动吗?

  •  
  •   luxinfl 2021-06-10 10:25:12 +08:00 2437 次点击
    这是一个创建于 1591 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个现象,当 application.yml 格式错误的时候,启动程序,控制台打印的日志格式并没有按照日志配置文件的来,甚至此时应该没有到日志组件加载的那一步。所以有没有什么方法可以让日志组件提前启动?

    问这个问题的原因是,项目在 linux 用 java -jar xxz.jar >/dev/null 2>&1 &启动时,脚本把打印信息吞了,此时系统配置文件格式错误的日志也不会打印了。所以在不改动脚本的情况下可以吗????
    13 条回复    2021-06-10 18:11:00 +08:00
    suenlai
        1
    suenlai  
       2021-06-10 10:43:58 +08:00
    这个时候日志相关的 bean 还没有加载进来,springboot 好像有种机制是先把要打印的放在缓冲区, 等加载完后再打印。
    luxinfl
        2
    luxinfl  
    OP
       2021-06-10 10:45:55 +08:00
    @suenlai 那就是没法搞到指定文件?只能靠修改 shell 脚本来打印了么。有没有可能在监听器里面实现
    suenlai
        3
    suenlai  
       2021-06-10 10:57:28 +08:00
    Deferred Log that can be used to store messages that shouldn't be written until the logging system is fully initialized.
    你参考下这个 API:Deferred Log
    suenlai
        4
    suenlai  
       2021-06-10 11:12:28 +08:00
    deferred log 在 logback 初始化前用的是 commons-logging
    "
    The name (<code>commons-logging.properties</code>) of the properties file to search for.
    "
    Aruforce
        5
    Aruforce  
       2021-06-10 11:17:35 +08:00
    在 main 方法执行 application run 之前就使用 logger 。。。这样 logger 就在 application 启动之前启动了
    Aruforce
        6
    Aruforce  
       2021-06-10 11:21:07 +08:00
    @Aruforce 比如 logback 这种...但是 spring-logback.xml 和 logback.xml 不知道能不能共存..有个不确定的问题是 spring logger starter 会不会对 logback reconfigure... 如果不能的话。。spring-logback.xml 就没啥用了
    wz497345846
        7
    wz497345846  
       2021-06-10 11:24:02 +08:00
    写在 bootstrap.yml 里面
    luxinfl
        8
    luxinfl  
    OP
       2021-06-10 14:21:11 +08:00
    @suenlai 我去查一下,我今天才刚知道有这么个 log
    luxinfl
        9
    luxinfl  
    OP
       2021-06-10 14:21:41 +08:00
    @wz497345846 这个只是配置文件会优先读到吧
    luxinfl
        10
    luxinfl  
    OP
       2021-06-10 14:22:36 +08:00
    @Aruforce 我尝试过,但打印的格式不是自定义的,说明日志组件还是没有初始化完成吧
    Aruforce
        11
    Aruforce  
       2021-06-10 17:06:55 +08:00
    @luxinfl 因为你在使用 SpringBoot 我假定你在使用 spring-logback.xml 做日志组件的配置。。但是 logback 本身是默认读取 logback.xml 的。。。所以在 Springboot 对 logback 配置完成之前 logback 是在使用自己的默认配置...

    你可以增加一个 logback.xml 并且里面有你自己的格式配置 这个可能要求配置参数不能依赖 springprofile...来验证
    Aruforce
        12
    Aruforce  
       2021-06-10 17:10:20 +08:00
    @Aruforce 或者你可以看看 LoggingApplicationListener SpringBootJoranConfigurator LoggingSystem LogbackLoggingSystem 这几个类。。。我是以前大略看过..不过大体启动逻辑和一些默认配置 就在这些类里面
    Amit
        13
    Amit  
       2021-06-10 18:11:00 +08:00
    log 组件是不依赖 spring 容器的,spring 启动后会通过 log 组件的 api 更新日志级别和格式,所以我猜启动的时候应该是用的默认格式
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1066 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:28 PVG 02:28 LAX 11:28 JFK 14:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86