(我希望将某些类记录到单个文件中,并将某些类记录到各自的日志文件中。)
(我不想使用像log4j或slf4j这样的库,请不要推荐这些。)
我遇到的问题是
到目前为止每个类都有自己的日志文件,我已经使用Java.util.logging实现了。 但是现在要求某些类应该记录到一个文件。
我知道如何记录到一个文件,但主要的是我为所有类编写的功能,以写入它的相应日志文件。我不想复制该代码,因为将日志写入单个文件的类将使用相同的方法。
对于登录到同一个文件,我需要一个logger对象,我可以通过static keyword来实现。
这是已经写完的全班
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;
}
现在我可以在所有将它们的日志写入一个文件的类中使用它。
答案 0 :(得分:1)
记录器(java.util.logging.Logger
类的实例)位于命名空间层次结构中,由您提供Logger.getLogger(String name)
的名称定义。
因此,您可以将一个记录器附加到com.
,另一个附加到com.consolelogging.
,另一个附加到com.filelogging.
名称。
我认为在您的情况下,您可以根据类的完全限定名称创建每个记录器,从而确保每个类都有自己的记录器。
您可以通过命名空间创建一些没有任何子项连接的根级别记录器,并将每个记录器的输出泵送到单独的文件中。
换句话说,您调用Logger.gerLogger("file_one")
的每个类都将记录到为此记录器定义的appender定义的同一文件。
将每个类记录到一个单独的文件中也是非常低效(并阻碍分析),但如果这些是您的要求,那么就这样吧。
希望这有帮助。