Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java应用程序中访问记录器_Java_Logging - Fatal编程技术网

在Java应用程序中访问记录器

在Java应用程序中访问记录器,java,logging,Java,Logging,我有一个关于登录Java应用程序的问题。我想用用户友好的消息记录主要的用户操作和可能的错误。因此,我有两个用于记录器的附加器:一个在对话框中显示错误(level=error),另一个将当前用户会话的日志写入html文件,以便用户在出现问题时可以发回此文件 为了避免在每个类中创建记录器(private logger=…),我在类应用中有一个配置记录器的静态引用,该类应用还具有访问记录器的方法: public class App { private static Logger logger

我有一个关于登录Java应用程序的问题。我想用用户友好的消息记录主要的用户操作和可能的错误。因此,我有两个用于记录器的附加器:一个在对话框中显示错误(level=error),另一个将当前用户会话的日志写入html文件,以便用户在出现问题时可以发回此文件

为了避免在每个类中创建记录器(private 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有一个这样的例子)