【问题标题】:Bad level value for property and can't set level for java.util.logging.FileHandler属性的级别值错误,无法为 java.util.logging.FileHandler 设置级别
【发布时间】:2018-01-03 14:21:28
【问题描述】:

这是一项学校作业:我必须构建一个自定义记录器类,该记录器类能够从我的项目中的任何位置进行记录。

除了java.util.logger,我不能使用其他任何东西。 我正在使用位于我项目的 /conf 文件夹中的属性文件。

我收到此错误:

属性的错误级别值:java.util.logging.FileHandler.level

无法为 java.util.logging.FileHandler 设置级别

我认为这就是为什么我的 debug() 方法不能在我的文件中打印“ddd”以及为什么我不能用我设置的这个字符串格式化文件:“[%1$tc] - [%2$s ] [%4$s] [%5$s] %n"。

我不知道我在 conf 文件或代码中可能犯了什么错误:导入是正确的,我在代码上没有错误/警告。

我知道我永远不应该使用绝对路径,但我认为这不是我的问题,解决此问题后路径将得到修复。

我的 /test 文件夹中的 try.log 输出:

03-Jan-2018 14:01:03 logger.classLogger 警告

警告:请注意

请 03-Jan-2018 14:01:03 logger.classLogger 错误

严重:错误

03-Jan-2018 14:01:03 logger.classLogger 信息

信息:信息

这是我的 .properties 文件:

.level=ALL
handlers = java.util.logging.FileHandler 
java.util.logging.FileHandler.level = FINE 
java.util.logging.FileHandler.append = true 
java.util.logging.FileHandler.limit = 1000000 
java.util.logging.FileHandler.count = 100 
java.util.logging.FileHandler.pattern =  %t/Log%u%g.log
java.util.logging.SimpleFormatter.format = "[%1$tc] - [%2$s] [%4$s] [%5$s] %n"
java.util.logging.FileHandler.formatter =  java.util.logging.SimpleFormatter

这是我的课:

  public class classLogger {

  Logger logger;
  FileHandler fh;
  SimpleFormatter sf;

  public classLogger(String classname){

    this.logger = Logger.getLogger(classname);
    logger.setLevel(Level.ALL);

    try {
      String path = "D:\\myprojects\\logger\\conf\\logging.properties";
      FileInputStream configFile = new FileInputStream(path); 
      LogManager.getLogManager().readConfiguration(configFile);
    }
    catch (IOException ex)
    {
    }
 
    try {
      String directory = "C:\\Documents and Settings\\E520user\\Desktop\\test"; 
      String filename = "\\try.log";
      this.fh = new FileHandler(directory+filename);
    }
    catch (IOException ex1) {
      
    }

    this.sf = new SimpleFormatter();

    //set formatter
    fh.setFormatter(sf);

    //add handler
    logger.addHandler(fh);

  }

  public void error(String msg){
    logger.severe(msg);
  }

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

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

  public void debug(String msg){
    logger.fine(msg);
  }
  public static void main(String[] args) {

    IRSLogger log = new classLogger(classLogger.class.getName());
    log.warning("attention please");
    log.error("error");
    log.debug("dddd");
    log.info("info");

  }
}

【问题讨论】:

  • 什么是 IRSLogger?

标签: java logging properties java.util.logging


【解决方案1】:

在我的 Mac 上试用过,效果很好

$ cat try.log 
"[Wed Jan 03 14:35:22 GMT 2018] - [classLogger warning] [WARNING] [attention please] 
""[Wed Jan 03 14:35:22 GMT 2018] - [classLogger error] [SEVERE] [error] 
""[Wed Jan 03 14:35:22 GMT 2018] - [classLogger debug] [FINE] [dddd] 
""[Wed Jan 03 14:35:22 GMT 2018] - [classLogger info] [INFO] [info] 

不过,我也收到此消息:Can't set level for java.util.logging.FileHandler

您可以尝试从您的属性文件中删除java.util.logging.FileHandler.level = FINE 吗?

提示

您应该从以下行中删除 "java.util.logging.SimpleFormatter.format = "[%1$tc] - [%2$s] [%4$s] [%5$s] %n"

编辑:这适用于我的电脑

import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.*;

public class ClassLogger {

  private Logger logger;
  private FileHandler fh;

  public ClassLogger(String classname){

    this.logger = Logger.getLogger(classname);

    try {
      String path = "/Users/myUser/Workspace/stackoverflow/test/src/main/java/logging.properties";
      FileInputStream configFile = new FileInputStream(path);
      LogManager.getLogManager().readConfiguration(configFile);
    } catch (IOException ex) {
      ex.printStackTrace();
    }

    try {
      String directory = "/Users/myUser/Workspace/stackoverflow/test/src/main/java/";
      String filename = "try.log";
      this.fh = new FileHandler(directory+filename);
    } catch (IOException ex1) {
      ex1.printStackTrace();
    }

    //add handler
    logger.addHandler(fh);
  }

  public void error(String msg) { logger.severe(msg);}
  public void warning(String msg) { logger.warning(msg); }
  public void info(String msg) { logger.info(msg); }
  public void debug(String msg) { logger.fine(msg); }

  public static void main(String[] args) {
    ClassLogger log = new ClassLogger(ClassLogger.class.getName());
    log.warning("attention please");
    log.error("error");
    log.debug("dddd");
    log.info("info");
  }
}

logging.properties

.level=ALL
handlers = java.util.logging.FileHandler
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.limit = 1000000
java.util.logging.FileHandler.count = 100
java.util.logging.FileHandler.pattern =  %t/Log%u%g.log
java.util.logging.SimpleFormatter.format = [%1$tc] - [%2$s] [%4$s] [%5$s] %n
java.util.logging.FileHandler.formatter =  java.util.logging.SimpleFormatter

try.log输出

[Wed Jan 03 15:27:55 GMT 2018] - [ClassLogger warning] [WARNING] [attention please] 
[Wed Jan 03 15:27:55 GMT 2018] - [ClassLogger error] [SEVERE] [error] 
[Wed Jan 03 15:27:55 GMT 2018] - [ClassLogger debug] [FINE] [dddd] 
[Wed Jan 03 15:27:55 GMT 2018] - [ClassLogger info] [INFO] [info] 

【讨论】:

  • 那是以前的名字,没注意...但是还是不行,如果我用classLogger运行同样的错误
  • 我认为它找不到属性文件。您可以在两个 catch 块中添加ex.printStackTrace(); 吗?您可能会在那里收到 FileNotFoundException
  • 添加并再次运行,同样的问题。我很确定可以找到属性文件,因为否则错误不会是“属性的坏值”也许我应该写点别的,而不仅仅是 FINE?其他尝试捕获是围绕文件创建,并且总是创建它的 try.log 文件(我检查上次我每次运行我的项目时修改它的时间)
  • 运行时控制台中没有异常?如果您为属性文件设置了虚假路径怎么办?是不是一样的行为?
  • java.io.FileNotFoundException: D:\myproject\conf\ggg.properties 如果我设置了错误的路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多