java - 使用 java.util.Logging 将某些类记录到单个文件中,并将某些类记录到各自的日志文件中

标签 java logging

(我想将某些类记录到单个文件中,并将某些类记录到各自的日志文件中。)

(我不想使用任何像 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/

相关文章:

java - 是否有任何通用的 API/SDK 可以将自定义标签添加到现有的 AWS 资源?

java - Android 从耳机/USB 插孔发送/接收字节?

java - 我无法将变量传递给 Main 方法(Cucumber)

java - 在 !.isTermminate 循环内添加 Thread.sleep 可以吗?

qt - 替换 console.debug() 的日志记录后端 console.warn()

java - 使用 import some.directory.* 性能更差?

java - 你如何在 slf4j 中格式化异常?

.net - NLog:记录在 IIS 中的 WCF 应用程序中调用该应用程序的用户

java - Logback - 打印出调用日志方法的方法名

c# - ASP.NET Core 在所有日志条目中包含时间戳