代码之家  ›  专栏  ›  技术社区  ›  VolkA

如何使用属性文件设置Java日志记录?(java. U.L.Load)

  •  72
  • VolkA  · 技术社区  · 15 年前

    我有一个愚蠢的Java日志记录问题:我正在从我的应用程序配置文件中加载日志记录配置,但是它在读取文件之后不会记录任何东西(看起来很像你在网络上发现的例子,除了附加的应用程序配置——删除这也没用)。“正在初始化…”日志行显示得很好,但“启动应用程序”和任何进一步的消息既没有记录到控制台,也没有创建日志文件。我这里缺什么?

    记录器代码如下所示:

    ...
    Logger log = Logger.getLogger("myApp");
    log.setLevel(Level.ALL);
    log.info("initializing - trying to load configuration file ...");
    
    Properties preferences = new Properties();
    try {
        FileInputStream configFile = new FileInputStream("/path/to/app.properties");
        preferences.load(configFile);
        LogManager.getLogManager().readConfiguration(configFile);
    } catch (IOException ex)
    {
        System.out.println("WARNING: Could not open configuration file");
        System.out.println("WARNING: Logging not configured (console output only)");
    }
    log.info("starting myApp");
    ...
    

    这是配置文件:

    appconfig1 = foo
    appconfig2 = bar
    
    # Logging
    handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
    .level = ALL
    
    # File Logging
    java.util.logging.FileHandler.pattern = %h/myApp.log
    java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
    java.util.logging.FileHandler.level = INFO
    
    # Console Logging
    java.util.logging.ConsoleHandler.level = ALL
    
    5 回复  |  直到 8 年前
        1
  •  23
  •   Charlie Martin    15 年前

    好的,第一直觉在这里:

    handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
    .level = ALL
    

    Java PROP文件解析器不是那么聪明,我不确定它会处理这个。但我会再去看医生的……

    同时,尝试:

    handlers = java.util.logging.FileHandler
    java.util.logging.ConsoleHandler.level = ALL
    

    更新

    不,该死,需要更多的咖啡。没有关系。

    虽然我想得更多,但请注意,您可以在 Properties 加载和打印一个PROP文件:可能需要编写一个最小的程序来查看Java认为它在该文件中读取的内容。


    另一个更新

    这条线:

        FileInputStream configFile = new FileInputStream("/path/to/app.properties"));
    

    有一个额外的结束paren。它无法编译。确保使用您认为是的类文件。

        2
  •  86
  •   Whymarrh    8 年前

    您可以通过命令行设置日志配置文件:

    $ java -Djava.util.logging.config.file=/path/to/app.properties MainClass

    这样看起来更干净,更容易维护。

        3
  •  12
  •   ecbrodie Slawomir Jaranowski    11 年前

    我在上面的代码中尝试过你的代码不要使用 [首选项.load(configfile);] 语句,它将起作用。

    public static void main(String[]s)
    {
    
        Logger log = Logger.getLogger("MyClass");
        try {
        FileInputStream fis =  new FileInputStream("p.properties");
        LogManager.getLogManager().readConfiguration(fis);
        log.setLevel(Level.FINE);
        log.addHandler(new java.util.logging.ConsoleHandler());
        log.setUseParentHandlers(false);
    
        log.info("starting myApp");
        fis.close();
    
        } 
        catch(IOException e) {
        e.printStackTrace();
        }
    }
    
        4
  •  7
  •   Vikky Kumar    8 年前
    Logger log = Logger.getLogger("myApp");
    log.setLevel(Level.ALL);
    log.info("initializing - trying to load configuration file ...");
    
    //Properties preferences = new Properties();
    try {
        //FileInputStream configFile = new //FileInputStream("/path/to/app.properties");
        //preferences.load(configFile);
        InputStream configFile = myApp.class.getResourceAsStream("app.properties");
        LogManager.getLogManager().readConfiguration(configFile);
    } catch (IOException ex)
    {
        System.out.println("WARNING: Could not open configuration file");
        System.out.println("WARNING: Logging not configured (console output only)");
    }
    log.info("starting myApp");
    

    这是有效的……) 必须在readconfiguration()中传递inputstream。

        5
  •  3
  •   techzen    15 年前

    是否在正确的路径中搜索日志文件: %H/一% U测井曲线

    这里%h解析为您的家:在Windows中,此默认值为: C:\文档和设置(用户名)。

    我已经尝试过您发布的示例代码,在您指定配置文件路径(Loggn.For属性,通过代码或Java ARG)之后,它工作得很好。