【问题标题】:javafx application write log to file [duplicate]javafx应用程序将日志写入文件[重复]
【发布时间】:2015-01-23 11:42:58
【问题描述】:

我正在尝试将我的多阶段应用程序配置为还将控制台消息(日志)输出到文件。

这是我的主要课程:

public class Main extends Application {

    private Stage stage;
    private User loggedUser;
    ...
    public static void main(String[] args) throws IOException {

        Application.launch(Main.class, (java.lang
            .String[])null);
    }

    @Override
    public void start(Stage primaryStage) throws IOException {

        try {
            stage = primaryStage;
            stage.setTitle("FXML Login Sample");
            gotoLogin();
            primaryStage.show();
        } catch (Exception ex) {

            Logger.getLogger(Main.class.getName()).log(Level.INFO, null, ex);
        }
    }
    ...
    private void gotoProfile() {
        try {
            FXMLDocumentController fxmlDocument = (FXMLDocumentController)    replaceSceneContent("FXMLDocument.fxml");
            fxmlDocument.setApp(this);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.INFO, null, ex);

        }
    }

   private void gotoLogin() {
       try {
           LoginController login = (LoginController) replaceSceneContent("login.fxml");
           login.setApp(this);
       } catch (Exception ex) {
           Logger.getLogger(Main.class.getName()).log(Level.INFO, null, ex);
       }
   }

如何将控制台的输出也写入文件?我是否应该配置第二个记录器,只使用现有的记录器并将其内容附加到文件中?

【问题讨论】:

  • 您使用的是哪个 Logger API?
  • 你的日志配置是什么样的?
  • 使用 java java.util.logging
  • 我想我正在使用默认的 Javafx 日志记录配置,因为我所有的日志记录语句都是这样的:Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.ALL, null, ex);
  • 你可能会看看这个帖子:stackoverflow.com/questions/15758685/…。由于您想将相同的输出记录到控制台和文件,它可能更喜欢使用相同的记录器对象。通常我更喜欢 log4j 作为日志 API。

标签: java javafx javafx-2 javafx-8 java.util.logging


【解决方案1】:

据我从您的问题和 cmets 了解到,您尚未设置配置文件。

在您的应用程序旁边提供一个 logging.properties 文件(而不是在 jar 中)。

我手头只有一个使用 ConsoleHandler 的示例,但您可以添加其他处理程序,例如 FileHandler

handlers= java.util.logging.ConsoleHandler


.level= INFO

java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

java.util.logging.SimpleFormatter.format=%1$tF %1$tT %4$S %2$s - %5$s%6$s%n


my.package.x.level = SEVERE
my.package.y.level = INFO

然后在启动应用程序时传递以下命令行参数:

-Djava.util.logging.config.file=<path to configuration file>/logging.properties

您可以在此处找到更多文档:https://docs.oracle.com/javase/8/docs/technotes/guides/logging

【讨论】:

  • 我在哪里设置实际的日志文件名?只有一次,而不是我项目中的每个班级?例如。我是否必须实现一个日志管理器类并在我的项目的每个类中实例化它?
  • @thanili 您将配置文件位置作为命令行参数传递给“java”命令,如我的回答中所述 - 只需一次。您不必为此实现任何类。
  • 我可以看到,在命令行中作为参数,我正在传递 logging.properties 文件,在我的评论中,我的意思是在哪里可以设置 log.txt 文件...实际的日志文件
  • @thanili 看看 FileHandler 的模式属性:docs.oracle.com/javase/8/docs/api/java/util/logging/…
  • log4j 似乎很容易配置使用并且比 jata.util.logging 更具可扩展性...感谢您的回答...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
相关资源
最近更新 更多