weixin_45049221 2023-09-12 17:27 采纳率: 100%
浏览 1
已结题

log4j.properties获取系统变量的问题

```java

@Test
public void test(){
Logger logger = Logger.getLogger(Log4jIpConfig.class);
System.setProperty("machineIp","123456");
logger.info("日志输出测试");
}

```在log4j框架中,如上代码,最终的日志中无法输出 machieIp代表的值 123456;
但是
将如上代码中第一行获取logger和第二行System.setProperty位置互换,那么日志中可以输出123456,请问这是因为什么原因,当前有没有解决办法

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-12 20:51
    关注

    【以下回答由 GPT 生成】

    这是因为log4j在初始化时已经读取了log4j.properties配置文件,并且设置了相应的日志输出规则。而System.setProperty("machineIp","123456")是在logger对象初始化之后才设置的,所以在日志输出时无法获取到该属性的值。

    解决办法是在获取logger对象之前,先手动加载log4j配置文件,并使用PropertyConfigurator.configure()方法来加载log4j.properties配置文件。

    以下是具体的解决方案:

    @Test
    public void test(){
        // 加载log4j配置文件
        PropertyConfigurator.configure("log4j.properties");
    
        // 设置machineIp属性
        System.setProperty("machineIp","123456");
    
        // 获取logger对象并输出日志
        Logger logger = Logger.getLogger(Log4jIpConfig.class);
        logger.info("日志输出测试");
    }
    

    通过手动加载log4j配置文件,可以保证log4j在初始化时能够读取到System.setProperty设置的machineIp属性的值,从而在日志输出时能够正确地获取到该属性的值。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 9月12日

悬赏问题

  • ¥15 关于LT3758反激式负压电源,功率三极管烧毁的问题
  • ¥20 aruba ap305 CAP转IAP
  • ¥20 rockchip rk3588 ffmedia运行异常
  • ¥30 如何用 Java 简单系统设计?(相关搜索:服务器|面向对象设计|随机数)
  • ¥15 鸿蒙开发(关键词-开发环境)
  • ¥15 错误使用 mex Embedding metadata in the MEX file failed.
  • ¥30 Fractal eXtreme 64-bit求解锁15天限制
  • ¥30 openvpn 启动错误
  • ¥15 有偿解决脑电仪导出数据edf时出现报错,有偿
  • ¥15 关于下载R包”org.Hs.eg.db“的时候,遇到了could not find function "file.edit"的问题!