记录器处理程序不能在不同的类java中工作

时间:2014-11-03 12:40:15

标签: java logging handler

我是Java的新手,但我必须编写一个简单的记录器。 我的问题是我的记录器不会转移它的处理程序。

我的第一堂课是:

public class LoggerClass {
    static final Logger logger = Logger.getLogger("myLogger");

    FileHandler fh;  
        public LoggerClass() {
        try {
            this.fh = new FileHandler("C:/Users/Administrator/Desktop/Logging%u.txt");
        } catch (IOException | SecurityException ex) {
            Logger.getLogger(LoggerClass.class.getName()).log(Level.SEVERE, null, ex);
        }
        logger.addHandler(fh);
        SimpleFormatter formatter = new SimpleFormatter();  
        fh.setFormatter(formatter); 

    }

}

我希望通过这样做将记录器转移到另一个类:

package Logger;
import static Logger.LoggerClass.logger;
import java.io.IOException;
import java.util.logging.Level;

public class LoggingTest {

    public static void main(String[] args) throws IOException {

        try
    {
      ((Object) null).toString();
    }
    catch ( Exception e )
    {
      logger.log( Level.SEVERE, "oh oh", e );
    }

    logger.info( "Hat funktioniert" );
  }
    }

我几乎尝试了所有我发现的东西,并且记录器功能但是它只在控制台上输出它而不是它应该在文件中的输出

2 个答案:

答案 0 :(得分:0)

改变这个:

static final Logger logger = Logger.getLogger("myLogger");

public static final Logger logger = Logger.getLogger("myLogger");

您在类中为其定义了Logger并使用defail访问权限的默认访问权限的原因,您只能在包中访问它。在您使用的地方,您有另一个包,因此会出错。

以上表格使用记录器如:

LoggerInterface.logger.info( "Hat funktioniert" );

由于您将其定义为静态,因此请使用classname.instance.method(parameter)

答案 1 :(得分:0)

在测试中,您从未配置过记录器。试试这个:

    package Logger;
    import static Logger.LoggerClass.logger;
    import java.io.IOException;
    import java.util.logging.Level;

    //There are better ways to do this.
    static {
       new LoggerClass();
    }

    public class LoggingTest {



    public static void main(String[] args) throws IOException {

        try
    {
      ((Object) null).toString();
    }
    catch ( Exception e )
    {
      logger.log( Level.SEVERE, "oh oh", e );
    }

    logger.info( "Hat funktioniert" );
  }
    }