在Java应用程序中访问记录器
我有一个关于登录Java应用程序的问题。我想用用户友好的消息记录主要的用户操作和可能的错误。因此,我有两个用于记录器的附加器:一个在对话框中显示错误(level=error),另一个将当前用户会话的日志写入html文件,以便用户在出现问题时可以发回此文件 为了避免在每个类中创建记录器(private logger=…),我在类应用中有一个配置记录器的静态引用,该类应用还具有访问记录器的方法:在Java应用程序中访问记录器,java,logging,Java,Logging,我有一个关于登录Java应用程序的问题。我想用用户友好的消息记录主要的用户操作和可能的错误。因此,我有两个用于记录器的附加器:一个在对话框中显示错误(level=error),另一个将当前用户会话的日志写入html文件,以便用户在出现问题时可以发回此文件 为了避免在每个类中创建记录器(private logger=…),我在类应用中有一个配置记录器的静态引用,该类应用还具有访问记录器的方法: public class App { private static Logger logger
public class App {
private static Logger logger = Logger.getLogger("logger name");
…
public static void logError(String message, Throwable cause) {
…
}
public static void logInfo(String message) {
…
}
}
日志记录主要在UI类中完成:
class UIWidget extends UIFrameworkWidget {
void aMethod() {
try {
someBusinessLogic();
} catch (Exception e) {
App.logError(“log message”, e);
}
}
}
这是一种好的做法吗?(请注意,小部件是由框架创建的。)
提前感谢您对此的回答、评论或提示最好使用单个静态记录器实例,但允许每个类创建一个私有实例,该实例使用类的名称(可能还有其他信息)初始化。然后,这个私有实例使用静态实例来实际执行其日志记录,但如果必要,可以省略它,并减少对外部类的引用 <>这就是<>代码> SLF4J,它是一个日志框架,你应该考虑使用-但是你可以以同样的方式自己滚动。< /P>
请注意,但是我不知道如何在对话框中显示错误消息-可能需要显式添加这些消息。看来您离子类化JDK记录器只差一步了。只有一个静态实例可以防止您在运行时以特定类为目标。如果您将Logger子类化,那么您仍然可以将许多Logger作为日志类,同时保留appender的特性 您还可以设计自己的布局(至少在log4j中,甚至可以添加占位符——geronimo有一个这样的例子)