在使用相同的导入名称但不同的对象进行实例化时出错

时间:2017-12-28 21:30:39

标签: java

我在java中使用SLF4j库来获取更简单的方法来记录我的应用程序,我遇到了以下问题。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

[...]

FileHandler fh = new FileHandler(LOGS_FILE.getAbsolutePath());
java.util.logging.Logger javaLogger = new java.util.logging.Logger ("logger");
javaLogger.addHandler(fh);
SimpleFormatter sf = new SimpleFormatter();
fh.setFormatter(sf);

所以,我使用SLF4J登录我的记录器,然后在文件处理程序中返回jdkLogger,以便在应用程序关闭时返回一个文件。但是,当我尝试启动我的应用程序时出现以下错误:

  

"线程中的异常" main" java.lang.Error:未解决的编译问题:       构造函数Logger(String)不可见"

班级的总体性:

package fr.theblackdev.BungeeNetworkManager;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



public class Main {

    public static final File DIR = new File("");
    public static final File CONFIG_DIR = new File(DIR.getAbsolutePath(), "BNMConfig");
    public static final File LOGS_DIR = new File(DIR.getAbsolutePath(), "logs");

    public static final File TEMPLATE_FILE = new File(CONFIG_DIR, "template.yml");
    public static File LOGS_FILE;

    public static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static final String CONSOLE_PREFIX = "BungeeNetworkManager » ";

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {

        System.out.println(new Date());

        DIR.mkdirs();
        CONFIG_DIR.mkdirs(); //TODO A Décommenter
        LOGS_DIR.mkdirs();

        Date starting_date = new Date();
        LOGS_FILE = new File(LOGS_DIR, "logs  " + starting_date.getDate() + "_" + starting_date.getMonth() + "_" + 
                starting_date.getHours() + "h" + starting_date.getMinutes() + "m" + starting_date.getSeconds() + "s.txt");

        try {
            LOGS_FILE.createNewFile();
            if(!TEMPLATE_FILE.exists()) {TEMPLATE_FILE.createNewFile();}
        }
        catch (IOException e) { 
            logger.error("{}Le programme n'a pas pu créer les fichiers nécessaires à son fonctionnement !", CONSOLE_PREFIX);
            logger.error("{}", e);
            System.exit(1);
        }

        try {
            FileHandler fh = new FileHandler(LOGS_FILE.getAbsolutePath());
            java.util.logging.Logger javaLogger = new java.util.logging.Logger ("logger");
            javaLogger.addHandler(fh);
            SimpleFormatter sf = new SimpleFormatter();
            fh.setFormatter(sf);

        } catch (Exception e) {}

        System.out.println(LOGS_DIR.getAbsolutePath()); 


            //TODO Mettre dans un fichier le logger

        logger.info("{}Démarrage terminé !", CONSOLE_PREFIX);

    }

}

2 个答案:

答案 0 :(得分:0)

由于Logger访问其构造函数,您无法从类外部实例化protectedLogger类提供静态方法getLogger(String name)来创建Logger的实例。看一下使用这种方法的例子:

java.util.logging.Logger logger = java.util.logging.Logger.getLogger("logger");

您可能还想查看Java API文档,以了解有关使用此方法的更多详细信息。

答案 1 :(得分:-1)

为什么你不能像这样使用

import java.io.IOException;; 
import java.util.logging.Logger; 
public class LoggerExample {    
private static final Logger LOGGER = Logger.getLogger(LoggerExample.class.getName());   
public static void main(String[] args) throws SecurityException, IOException {  
    LOGGER.info("Logger Name: "+LOGGER.getName());          
    LOGGER.warning("Can cause ArrayIndexOutOfBoundsException");             
    //An array of size 3        
int []a = {1,2,3};  
    int index = 4;      
LOGGER.config("index is set to "+index);                try{            System.out.println(a[index]);       
}catch(ArrayIndexOutOfBoundsException ex)
{           LOGGER.log(Level.SEVERE, "Exception occur", ex);        }           
} }