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 楼答案
根据您使用的环境,您可以为
sendMail
方法实现一个日志方面,它包装对sendMail
的所有调用,并将消息记录到正确的记录器这将解决您的两个代码风格问题,因为它将避免代码重复和问题分离(保持日志记录和邮件发送分开)。然而,如果这是应用程序中方面的唯一用例,那么它将引入额外的复杂性
实际上我觉得这更像是一个https://codereview.stackexchange.com/的问题