package pkgone;
public class SuperType {
private Logger log = Logger.getLogger(this.getClass());
public void someAction() {
log.info("Doing something");
}
}
。
package pkgtwo;
import pkgone.SuperType;
public class SubType extends SuperType {
// for instances of SubType, the log object in SuperType
// will get initialized with SubType's class object
}
。
// some code somewhere that uses SubType
SubType obj = new SubType();
obj.someAction();
8条答案
按热度按时间toiithl61#
如果您创建了一个子类,则日志消息将被记录到子类的记录器中。
。
。
在上面的示例中,“正在执行某项操作”将被记录到pkgtwo.SubType记录器而不是pkgone.SuperType记录器,这可能是您想要的,也可能不是您想要的。
fkaflof62#
请尝试使用此方法查找泛型类...
最好的部分是您可以静态地使用此方法。
zhte4eai3#
如果你不想重复make
logger
并且想避免写错类名,这里有@Log的Project Lombok。如果您不介意在项目中多使用一个库,您可以添加一个带有简单注解的记录器。
txu3uszq4#
当然,这似乎很好。
请注意,其中一个含义是,如果您在从静态上下文使用日志时遇到问题-它可能未初始化或不可见
dly7yett5#
+1对于调用超级方法的子类示例,记录器将是子类。
此外,如果您将此应用为类的日志模板,并且您的类是抽象的,则this.getClass将失败,因为您没有此类的示例。
cu6pst1q6#
使用Apache Commons中的日志工厂:
不需要做其他任何事情。不确定LogFactory在问题发布时是否可用。如果你不想使用LogFactory,你也可以简单地使用带有getClass()的private final。
没有理由创建子类,除非你想要一个你的日志记录的层次结构,这也可以通过操作日志配置文件(如果你正在使用log4j.xml)来完成。当日志记录器被定义为静态的时候,你不能使用这个.getClass()。没有static或者private final,你会让日志记录器对你不想要的危险的可能的改变开放。
kse8i1jr7#
创建此类,然后将其添加到调用类中:
wz8daaqr8#
据我所知,这没有任何暗示。根据马特的评论,我想,这是每个人都想要的正确行为。