Java 在自定义记录器上设置日志记录级别似乎有异味
我正在为我的项目使用一个定制的Java 在自定义记录器上设置日志记录级别似乎有异味,java,logging,Java,Logging,我正在为我的项目使用一个定制的记录器,该记录器具有一些专门针对标准记录器中未包含的应用程序需求定制的功能。它的结构简化如下: public enum Logger { INSTANCE; public enum MessageType { TYPE_ERROR, TYPE_WARNING, TYPE_INFO, TYPE_VERBOSE } // Simplified method...
记录器
,该记录器具有一些专门针对标准记录器中未包含的应用程序需求定制的功能。它的结构简化如下:
public enum Logger
{
INSTANCE;
public enum MessageType
{
TYPE_ERROR,
TYPE_WARNING,
TYPE_INFO,
TYPE_VERBOSE
}
// Simplified method...
public void log(String msg, MessageType level)
{
// Handle the message and do something with it...
}
}
我现在已经实现了一个简单的方法setLogLevel
来设置日志记录级别,基本上定义了用户想要看到的内容以及将要在后台记录的内容。还有一种检查是否要记录某个级别的简短方法,称为getIsBeingLogged
。以下是两个定义:
private MessageType level = MessageType.TYPE_INFO;
public void setLogLevel(MessageType level)
{
this.level = level;
}
private boolean isBeingLogged(MessageType type)
{
switch (type)
{
case TYPE_ERROR:
return true;
case TYPE_WARNING:
return this.level == MessageType.TYPE_VERBOSE || this.level == MessageType.TYPE_INFO || this.level == MessageType.TYPE_WARNING;
case TYPE_INFO:
return this.level == MessageType.TYPE_VERBOSE || this.level == MessageType.TYPE_INFO;
case TYPE_VERBOSE:
return this.level == MessageType.TYPE_VERBOSE;
default:
return false;
}
}
不过,isBeingLogged
方法对我来说似乎很难闻。例如,如果我想添加一个MessageTypeTYPE\u DEBUG
,它在优先级上介于TYPE\u INFO
和TYPE\u VERBOSE
之间,我必须重写整个函数,我认为这只是要求一个小的语法错误
问题 对于
getIsBeingLogged
-方法和
我该怎么做呢
我环顾了一下四周,但没有找到令人满意的解决方案,我希望我没有忽略已经存在的一个好的解决方案。不确定这是否更好,但您可以为每个日志级别设置优先级,如果优先级高于(或低于,取决于您如何设置)引用的阈值,则返回“滥用”枚举并始终按优先级降序排列类型,并返回(type.ordinal())@assylias我不想依赖于同事在排序时可能会发生的变化,因为他们认为按字母顺序排序会更好一些,所以我排除了这种可能性。但是这个想法非常好,John Kane的答案也朝着相同的方向,所以感谢您的输入!现在的方法就是
return level.priority>=type。priority;
是的,看起来更好。在消息类型中有一个简单的隐藏字段priority
,不会有什么坏处。我认为这是一个很好的方法,谢谢你的回答!