(我想将某些类记录到单个文件中,并将某些类记录到各自的日志文件中。)
(我不想使用任何像 log4j 或 slf4j 这样的库,请不要推荐这些库。)
我遇到的问题是
到目前为止,每个类都有自己的日志文件,并且我已经使用 Java.util.logging 实现了。 但现在要求某些类应记录到一个文件中。
我知道如何记录到一个文件,但主要的是我为所有类编写的功能写入其各自的日志文件。我不想重复该代码,因为将日志写入单个文件的类将使用相同的方法。
对于登录到同一个文件,我需要一个记录器对象,我可以通过 static 关键字来实现。
这是已经写好的整个类
public class LogHelper {
private static String logPath = "/Users/Desktop/checklog";
private static Logger logger;
private String callingMethodName;
private static FileHandler fileHandler;
public LogHelper() {
super();
}
public LogHelper(String loggerName, String callingMethodName) {
logger = Logger.getLogger(loggerName);
this.callingMethodName = callingMethodName;
}
public String getPrefix(String method) {
String prefix = new StrBuilder(callingMethodName).append(".").append(method).append(": ").toString();
return prefix;
}
public void logDebug(String message) {
logger.logp(Level.ALL, "", "", message);
}
public void logError(String message) {
logger.logp(Level.SEVERE, "", "", message);
}
public void logWarn(String message) {
logger.logp(Level.WARNING, "", "", message);
}
public void logInfo(String message) {
logger.info(message);
}
public void logTrace(String message) {
logger.trace(message);
}
public static void setFileHandler(String fileName) throws IOException {
try {
String filePath = new StringBuffer().append(System.getProperty("user.dir")).append(File.separator).append("logs").append(File.separator).toString();
FileUtils.forceMkdir(new File(filePath));
FileHandler fileHandler = new FileHandler(new StringBuffer(filePath).append(fileName).append(".log").toString(), true);
System.out.println("setFileHandler() File Path :" + filePath);
logger.addHandler(fileHandler);
SimpleFormatter formatter = new SimpleFormatter();
fileHandler.setFormatter(formatter);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void closeFileHander() {
try {
if (fileHandler != null) {
logger.removeHandler(fileHandler);
fileHandler.flush();
fileHandler.close();
}
} catch (Exception ex) {
}
}
}
我想利用这个类,以便一些类能够写入单个文件,一些类能够写入各自的文件。
好的,暂时我已经这样解决了。
我创建了此类的静态对象,然后添加一个新的静态方法,该方法将返回该对象,但在返回之前将为其设置记录器。
所以我在上面写的类中添加了这些行。
private static LogHelper logHelper;
public static LogHelper getHelper(String loggerName,String fileName){
if(logHelper == null){
logHelper = new LogHelper();
}
logHelper.logger = Logger.getLogger(loggerName);
logHelper.setFileHandler(fileName);
return logHelper;
}
现在我可以在所有类中使用它,这些类会将日志写入一个文件。
最佳答案
记录器(java.util.logging.Logger
类的实例)位于命名空间层次结构中,由您为 Logger.getLogger(String name)
指定的名称定义。 .
因此,您可以将一个记录器附加到 com.
,另一张附于com.consolelogging.
还有一个附加到com.filelogging.
名称。
我认为在您的情况下,您根据类的完全限定名称创建每个记录器,从而确保每个类都有自己的记录器。
您可以简单地创建多个根级别记录器,而无需通过命名空间附加任何子记录器,并将每个记录器的输出泵送到单独的文件中。
换句话说,你调用Logger.gerLogger("file_one")
的每个类将记录到为此记录器定义的附加程序定义的同一文件。
此外,将每个类记录到单独的文件中效率非常低(并且会妨碍分析),但如果这些是您的要求,那就这样吧。
希望这有帮助。
关于java - 使用 java.util.Logging 将某些类记录到单个文件中,并将某些类记录到各自的日志文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43591103/