我在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);
}
}
答案 0 :(得分:0)
由于Logger
访问其构造函数,您无法从类外部实例化protected
。 Logger
类提供静态方法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); }
} }