Java util Logger未写入文件

时间:2019-05-30 10:15:40

标签: java java.util.logging

我为我的应用程序编写了一个愚蠢的Logger。它将日志信息,警告和严重消息写入日志文件。它在一段时间前运行良好,但是突然,它突然停止运行,没有任何原因。 如果该日志文件不存在,那么它将继续创建日志文件,但是不会写入任何内容。 我找不到为什么现在不起作用。我要感谢一些帮助。

使用我的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());

2 个答案:

答案 0 :(得分: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.");
    
  • 确保文件不是只读状态。
  • 尝试使用FileWriterPrintWriter手动写入文件。

如果第一个测试无法将任何内容打印到控制台,请阅读以下文档,您可以在其中找到Java记录器无法正常工作的常见原因列表以及如何解决它们的具体步骤(至少与配置有关的一个)

Why is my Java Logging not working

答案 1 :(得分:1)

在代码中,您正在使用Logs/LogFsForensics.log的相对路径,这意味着如果当前工作目录(如果进程更改),则该路径将无效。发生这种情况时,FileHandler will create a file in the default location。使用绝对路径或指定FileHandler special components之一。例如:

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

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

看看代码,我认为您希望getInstance被同步,因此您永远不会尝试创建多个处理程序。