当前位置: 首页 > 知识库问答 >
问题:

Java通过多个类进行日志记录

窦涵忍
2023-03-14

我想登录由几个类组成的应用程序。我想要一个。txt日志文件的末尾。因此,我创建了一个静态记录器实例,并在一个类中为其创建了一个FileHandler。因为我想要一个文件,所以我在FileHandler中将第二个参数设置为true,以便能够在日志记录期间追加日志文件。

public class MyLogging {
    static Logger logger;
    public Handler fileHandler;
    Formatter plainText;

    public MyLogging() throws IOException{
        //instance the logger
        logger = Logger.getLogger(MyLogging.class.getName());
        //instance the filehandler
        fileHandler = new FileHandler("myLog.txt",true);
        //instance formatter, set formatting, and handler
        plainText = new SimpleFormatter();
        fileHandler.setFormatter(plainText);
        logger.addHandler(fileHandler);

    }

之后,我创建了其他伐木工人。我知道我必须为每个类实例化一个记录器。因此,我只为每个类创建记录器(不带FileHandler)。但是所有的记录器都引用一个类(不是我创建记录器的类)。例如:

public class Test1 {
    static Logger logger;

    public Test1()throws IOException {

        logger = Logger.getLogger(MyLogging.class.getName());
    }

虽然执行了日志记录,但我不确定这是否是正确的解决方案。你能给我一些建议,如何用java来记录多个类吗。util。登录中?

共有1个答案

孟文栋
2023-03-14

在MyLogging类中,使构造函数私有而不是公共,需要以下方法:

private static Logger getLogger(){
    if(logger == null){
        try {
            new MyLogging();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return logger;
}
public static void log(Level level, String msg){
    getLogger().log(level, msg);
    System.out.println(msg);
}

log方法是静态的,因此可以使用类名从任何类调用它。

因此,在所有类中,您可以只调用log方法来记录日志,如下所示:

public class Test1 {
    //static Logger logger; //no need to create an object for logging

    public Test1()throws IOException {

         MyLogging.log(Level.INFO, MyLogging.class.getName()); //call log method using classname
    }
 类似资料:
  • 我试图使用refrofit2、kotlin和loging-拦截器记录所有请求(使用网络拦截器): 改造:“2.0.2” okhttp3 : “3.2.0” com.squareup.okhttp3:logging-interceptor 3.2.0 喜欢: 它只是打印: 到底发生了什么? -编辑- 记录器不会显示在主线程上执行请求的错误,因此请小心。

  • 问题内容: 任何人都可以在python中建议一种记录方法: 每天记录日志旋转 旋转日志时的压缩 可选-删除最早的日志文件以保留X MB的可用空间 可选-sftp日志文件到服务器 感谢您的任何答复 问题答案: 每天进行日志轮换: 使用TimedRotatingFileHandler 日志压缩 :设置参数。(请注意,此“技巧”仅适用于Python2。’bz2’不再被视为Python3中的编码。) 可选

  • 问题内容: 我正在做一个项目,目前正在用log4j实现一些日志记录,我很好奇我应该如何实现日志。我要介绍的两个实现如下: 第一选择 将超类的单个日志用于该类和所有子类: 第二种选择 为每个类,上级和下级使用单独的日志: 什么更有意义,为什么? 问题答案: 我也不会 相反,我会在两种情况下都使用正确的类。 如果您不进行大量日志记录(无论如何是个好主意),则可以改用一种方法。 如果有一个类经常调用它,

  • 如何从python脚本关闭pyspark日志记录?请注意:我不想对spark logger属性文件进行任何更改。

  • 如何将Tomcat9的内部日志记录(catalina和localhost)重定向到log4j2? 虽然Tomcat和Log4j的旧版本有很多指南,但我找不到任何关于Tomcat 9和Log4J2的“完整”指南;Apache Tomcat 9文档指向“替代日志框架提供的说明”,Apache Log4j文档说明(2.更正的jar名称): Log4j可以用作Apache Tomcat的日志记录框架。这种

  • 我想用IntelliJ IDEA2018.3.4将控制台输出记录到一个文件中。 我找到了这个答案,但是,我需要的是日志文件来记录多次运行,相反,最后一次运行会覆盖日志文件。 根据官方文档,我应该通过勾选“run/Debug Configurations”中的“Skip Content”复选框来获得连续日志记录,但我仍然只能获得日志中的最后一次运行。 我这样做对吗?还是有别的办法?