有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java根据状态更改记录器级别

假设我们有一些发送电子邮件的方法,邮件的状态级别为:

void sendEmail(Level level, String message) {
    ...
}

级别可以有三种类型:

enum Level {
   Info,
   Warn,
   Error
}

除了发送电子邮件本身,我们希望使用标准日志记录程序记录消息,但我们也希望尊重消息级别,因此对于Info级别,我们希望使用INFO日志记录程序级别,依此类推

我遇到了一种观点,即我们不应该在sendEmail内部进行日志记录,因为该方法本身是“通用的”,而在内部执行“特定的行为”:

void sendEmail(Level level, String message) {
    switch (level) {
       case Info: LOGGER.info("Sending message {}", message); break;
       ...
    }
    // other email sending stuff...
}

而是应该在调用此方法时在外部进行日志记录,例如:

LOGGER.error("Sending message: {}", message);
sendEmail(Level.Error, message);

...

LOGGER.warn("Sending message: {}", message);
sendEmail(Level.Warn, message);

还要注意,level不仅用于日志记录,而且还用于电子邮件内容中。还要考虑到示例非常简单:记录器的实际消息要复杂得多,包含封闭方法的几个其他参数

由于立场温和,我认为这两种方法是平等的。更严格一点,我认为建议的方法是使用许多日志调用,其中日志消息总是相同的(!)这是一个纯粹的代码复制

有什么优点和缺点吗;欺骗?以“基于意见”的方式结束对我来说也不错,因为这意味着我的“温和”立场也是正确的


共 (1) 个答案

  1. # 1 楼答案

    根据您使用的环境,您可以为sendMail方法实现一个日志方面,它包装对sendMail的所有调用,并将消息记录到正确的记录器

    这将解决您的两个代码风格问题,因为它将避免代码重复和问题分离(保持日志记录和邮件发送分开)。然而,如果这是应用程序中方面的唯一用例,那么它将引入额外的复杂性

    实际上我觉得这更像是一个https://codereview.stackexchange.com/的问题