logback.xml日志写入数据库改造,重写源码手工读取yml参数作为数据源参数的方法...

本文探讨了如何配置Logback将日志信息写入Oracle数据库,利用现有yml文件中的数据源信息,通过修改DriverManagerConnectionSource源码或直接读取yml参数,实现了日志的数据库存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:实现logback日志写入数据库,并且logback关于数据库链接使用yml已有的数据源信息
在logback.xml改造如下

<!-- 将日志存储到oracle数据库中 -->
    <appender name="db-classic-oracle" class="ch.qos.logback.classic.db.DBAppender"> 
            <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
        </connectionSource> 
    </appender> 
     <!-- 日志输出级别 -->
    <root level="ERROR">
        <appender-ref ref="console" />
        <appender-ref ref="db-classic-oracle" />
    </root> 

正常上述appender部分需要设置数据源参数,类似
<url>jdbc:oracle:thin:@XX:1521:orcl</url>

            <user>d</user>  
            <password>111111</password> 

但这部分内容实际上应用的主yml已经存在,所以想办法从yml已有的值去替换。logback本身应该能获取yml 参数。
类似

 <springProperty scope="context" name="dataUrl" source="spring.datasource.username"
            defaultValue="localhost"/>

但实验了很多次,未成功,不知道为何。所以采取修改DriverManagerConnectionSource源码的方式去解决。

查看源码发现下图设计的源码存在创建conn 的情况,所以已后面的代码形式去读取yml,数据库连接的相关参数即可。
两种代码都能解决。

clipboard.png

//读取yml的方式1
            YamlPropertiesFactoryBean yamlMapFactoryBean = new YamlPropertiesFactoryBean();
            yamlMapFactoryBean.setResources(new ClassPathResource("application.yml"));
            Properties properties = yamlMapFactoryBean.getObject();
            String username1=properties.getProperty("spring.datasource.username");
                
                
            //读取yml的方式2
            ClassPathResource resource = new ClassPathResource("application.yml");
            InputStream inputStream = resource.getInputStream();
            Map map = null;
            Yaml yaml = new Yaml();
            map = (Map) yaml.load(inputStream);
根据提供的引用内容,logback.xml配置文件是用于配置日志输出的。然而,logback本身并不直接支持将日志写入数据库。通常情况下,logback会将日志输出到文件或控制台。如果您希望将日志写入数据库,您可以考虑使用logback的Appender组件来自定义一个适配器,将日志写入数据库。可以参考中的logback.xml配置示例,使用自定义的Appender来实现将日志写入数据库的功能。具体的配置和实现方式将取决于您所使用的数据库和应用程序的要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringBoot集成slf4j日志logback.xml配置详解](https://blog.csdn.net/qq_29864051/article/details/130881230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [通过配置logback.xml日志写入数据库](https://blog.csdn.net/weixin_35916663/article/details/113000166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值