Java util Logger 未写入文件

问题描述 投票:0回答:2

我为我的应用程序编写了一个愚蠢的记录器。它将信息、警告和严重消息写入日志文件。前一段时间它工作得很好,但突然间,它无缘无故地停止工作了。 如果日志文件不存在,它会继续创建该文件,但不写入任何内容。 我找不到它现在不起作用的原因。我会感谢一些帮助。

使用 IDE 进行调试,我意识到消息已正确传递到 logger,并且 logger.info() 正在执行。

public class FsLogger {

    private static FsLogger instance;

    private final String filename = "Logs/LogFsForensics.log";
    private final String loggerName = "FsLogger";
    private static Logger logger;   
        private FileHandler fh;
        private final int limit = 1024*10000; //10 MB
        private SimpleFormatter sf;

    private FsLogger() {
        logger =  Logger.getLogger(loggerName);

        sf = new SimpleFormatter();
        try {
            fh = new FileHandler(filename, limit, 1, true);
            sf = new SimpleFormatter();
            fh.setFormatter(sf);

            logger.addHandler(fh);
        } catch (SecurityException | IOException e) {           
            e.printStackTrace();
        }
    }

    public static FsLogger getInstance() {
        if(instance == null) {
            instance = new FsLogger();
        }
        return instance;
    }

    public void info(String message) {
        logger.info(message);
    }

    public void warning(String message) {
        logger.warning(message);        
    }

    public void severe(String message) {
        logger.severe(message);
    }

记录器调用示例:

private FsLogger logger = FsLogger.getInstance();
logger.severe(e1.getMessage());
java java.util.logging
2个回答
2
投票

从代码中您使用的相对路径为

Logs/LogFsForensics.log
,这意味着如果进程的当前工作目录发生更改,则路径将无效。当发生这种情况时,FileHandler 将在默认位置创建一个文件。使用绝对路径或指定 FileHandler 特殊组件之一。例如:

/Logs/LogFsForensics.log
作为绝对路径或
%h/Logs/LogFsForensics.log
作为主目录的相对路径。

您可以从记录不显示修改测试程序以打印记录器树和处理程序。可能级别设置不正确或未安装处理程序。

查看代码,我认为您希望

getInstance
同步,这样您就不会尝试创建多个处理程序。


1
投票

我尝试执行您的代码并在控制台和文件中获得以下输出:

May 30, 2019 12:35:11 PM io.yooksi.Main main
INFO: This is a test.
May 30, 2019 12:35:11 PM io.yooksi.FsLogger info
INFO: This is an info message
May 30, 2019 12:35:11 PM io.yooksi.FsLogger warning
WARNING: This is a warning
May 30, 2019 12:35:11 PM io.yooksi.FsLogger severe
SEVERE: This is a sever error message

这意味着您的代码没有错误,因此您可以尝试以下操作:

  • 确保以下代码正确输出到控制台:

    Logger logger = Logger.getLogger("test");
    logger.info("This is a test.");
    
  • 确保文件不处于 只读状态。
  • 尝试使用
    FileWriter
    PrintWriter
    手动写入文件。

如果第一个测试无法将任何内容打印到控制台,请阅读以下文档,您可以在其中找到

Java
记录器无法工作的常见原因列表以及解决这些问题的具体步骤 (至少是与配置相关的步骤)

为什么我的 Java 日志记录不工作

© www.soinside.com 2019 - 2024. All rights reserved.