logback监听控制台日志

logback将控制台日志输出到文件

昨天,在上一篇logback文章下有朋友问,还是其他方法把控制台异常日志输出到文件不。事实上,我们想的只是抓取控制台的日志!而不是每次logger.info() .error() 来手动输出。logback这么强大,我也相信是有办法捕获到的。于是今天去翻了下logback的官方文档配置,果不其然找到了我想要的东西。(这里也在提醒下看官方文档困难的朋友,包括我。一定要尽力去克服这个障碍。很多中文文档是不全,而且有坑的)。[https://logback.qos.ch/manual/configuration.html ]

下面进入今天的主题。

  • 打开网页,搜索Listening to status messages。

    这里写图片描述
    蓝色部分大概意思是您还可以将StatusListener附加到StatusManager,以便您可以立即采取措施来响应状态消息,特别是在进行logback配置后发生的消息。 注册一个状态监听器是一个方便的方式来监督logback的内部状态,无需人工干预。OnConsoleStatusListener 类名应该很好理解他的用途了。

    当然也可以通过启动参数配置, 这里我们演示第一种:

java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener
  • 简单配置下logback.xml 方便测试
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>/data/logs/test/test.log</file>
        <encoder>
            <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
  • springboot主函数
@SpringBootApplication
@Import({DatabaseConfig.class})
@EnableAutoConfiguration
@Controller
public class Application extends SpringBootServletInitializer{

    final static Logger logger = LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {

        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        StatusManager statusManager = lc.getStatusManager();
        OnConsoleStatusListener onConsoleListener = new OnConsoleStatusListener();
        statusManager.add(onConsoleListener);

        SpringApplication.run(Application.class,args);
    }

    @RequestMapping("/")
    public void index() {
        logger.info("-----------  start ---------------");
        //制造一个运行时异常,这里没有捕获 
        int x = 1/0;
    }
}

现在我们启动项目,然后用postman或者RESTful 工具调用index()方法。
在/data/logs/test/test.log 下就能找到和我们控制台一样输出的异常日志。
如下图:
这里写图片描述

这种方式是不是比上一个方法更好了。
这里也要感谢留言的朋友,不然我也不会继续去研究这个部分了。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值