返回

aop——Java MDC Logger——包含太多MDC的方法。put()

发布时间:2022-04-21 12:43:55 191
# 工具
 
悬赏期满6天后.对这个问题的回答有资格获得+50名誉赏金。帕特想吸引更多关注关于这个问题:
这是一个工作示例,在该示例中,无论日志中的方法和参数长度如何,我都可以看到所有参数。
如果可能的话,寻找一个很好的解决方案,我可以重构我的30多个类,其中有更多行的MDC。这比实际逻辑更重要。
非常感谢。

关于使用Java的MDC的小问题。

起初,我有一些非常简单的方法,一些方法有很多参数(我缩短了参数列表,以使问题简短,但请想象一下)很多(包括参数)

 public String invokeMethodForPerson(int age, String name, boolean isCool, long distanceRun, double weight) {
        LOGGER.info("begin to invoke method invokeMethodForPerson");
        return methodForPerson(age, name, isCool, distanceRun, weight);
    }

    public String invokeMethodForCar(String model, boolean isElectric, long price, int numberOfDoors) {
        LOGGER.info("begin to invoke method invokeMethodForCar");
        return methodForCar(model, isElectric, price, numberOfDoors);
    }

    public String invokeMethodForFlower(String name, String color) {
        LOGGER.info("begin to invoke method invokeMethodForFlower");
        return methodForFlower(name, color);
    }

(这个问题不是关于如何重构一长串参数)

然后,我想利用MDC.MDC非常有用,它允许在日志聚合器工具等中进行更好的搜索。将它们作为第一级,而不是日志记录器本身,这非常有用。

因此,为了利用MDC,代码从简单变成了类似的东西,下面是我尝试的。

public String invokeMethodForPerson(int age, String name, boolean isCool, long distanceRun, double weight) {
        MDC.put("age", age);
        MDC.put("name", name);
        MDC.put("isCool", isCool);
        MDC.put("distanceRun", distanceRun);
        MDC.put("weight", weight);
        LOGGER.info("begin to invoke method invokeMethodForPerson");
        return methodForPerson(age, name, isCool, distanceRun, weight);
    }

    public String invokeMethodForCar(String model, boolean isElectric, long price, int numberOfDoors) {
        MDC.put("model", model);
        MDC.put("isElectric", isElectric);
        MDC.put("price", price);
        MDC.put("numberOfDoors", numberOfDoors);
        LOGGER.info("begin to invoke method invokeMethodForCar");
        return methodForCar(model, isElectric, price, numberOfDoors);
    }

    public String invokeMethodForFlower(String name, String color) {
        MDC.put("name", name);
        MDC.put("color", color);
        LOGGER.info("begin to invoke method invokeMethodForFlower");
        return methodForFlower(name, color);
    }

问题:现在看看代码,实际上有更多行MDC.put()而不是实际的业务逻辑代码

问题:除了增加成吨的生产线之外,还有没有更干净的方法来利用MDC的许多参数MDC.put(),如果可能,请使用AOP/方面/建议/切入点?

非常感谢。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像