首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定FileHandler正在使用的文件

确定FileHandler正在使用的文件
EN

Stack Overflow用户
提问于 2009-07-12 18:44:38
回答 4查看 4.9K关注 0票数 7

我正在创建一个允许循环浏览文件的java.util.logging.FileHandler。当我的应用程序运行多个实例时,会为应用程序的每个实例创建一个新的日志文件。我需要知道应用程序正在使用哪个文件,因为我想将日志文件上传到我的服务器以供进一步审查。如何判断某个FileHandler正在使用哪个文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-12 19:53:23

最简单的方法是在文件名本身中添加某种标识符,即在创建FileHandler时使用pattern参数。由于这些都是同一应用程序的实例,区分它们的一种方法是通过它们的进程id,因此您可以将其作为模式的一部分。一种更好的方法是通过命令行传递一个标识符,并使用它来生成您的文件名。这样,您就可以在某种意义上控制正在创建的文件。最后,如果您的应用程序知道为什么它与所有其他应用程序不同,例如,它连接到一个特定的数据库服务器,那么您可以只使用该数据库服务器名称作为文件名的一部分。

编辑:似乎没有任何接口来获取FileHandler正在使用的文件的名称。我建议研究一下x4juli中的日志记录扩展(它将大量log4j功能移植到java.util.logging规范中):

  • http://www.x4juli.org/

您应该能够替换提供getFile()方法的FileHandler的实例:

  • http://www.x4juli.org/api/org/x4juli/handlers/FileHandler.html
票数 2
EN

Stack Overflow用户

发布于 2012-06-27 08:46:03

实际上,只需自己扩展FileHandler就可以简单得多。例如..。

MyFileHandler.java:

代码语言:javascript
复制
import java.io.IOException;
import java.util.logging.FileHandler;
public class MyFileHandler extends FileHandler {
    protected String _MyFileHandler_Patern;
    public MyFileHandler(String pattern) throws IOException {
        _MyFileHandler_Patern = pattern;
    }
    public String getMyFileHandlerPattern() {
        return _MyFileHandler_Patern;
    }
}

DeleteMe.java:

代码语言:javascript
复制
import java.io.IOException;
import java.util.logging.Handler;
import java.util.logging.Logger;
public class DeleteMe {
    public static void main(String[] args) throws IOException {
        Logger log = Logger.getLogger(DeleteMe.class.getName());
        MyFileHandler output = new MyFileHandler("output.log");
        log.addHandler(output);
        for (Handler handler : log.getHandlers()) {
            if (handler instanceof MyFileHandler) {
                MyFileHandler x = (MyFileHandler) handler;
                if ("output.log".equals(x.getMyFileHandlerPattern())) {
                    System.out.println("found hanlder writing to output.log");
                }
            }
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-05-20 04:10:38

好吧,我不得不说,FileHandler没有提供确定日志文件的方法是非常愚蠢的。

最后,我编写了一个名为"chooseFile()“的函数,它在/tmp中搜索下一个可用的日志文件名并返回该文件。然后,您可以将该文件的名称传递给新的FileHandler()。

代码语言:javascript
复制
/**
 * Utility: select a log file.  File is created immediately to reserve
 * its name.
 */
static public File chooseFile(final String basename) throws IOException {
    final int nameLen = basename.length();
    File tmpDir = new File(System.getProperty("java.io.tmpdir"));
    String[] logs = tmpDir.list(new FilenameFilter() {
        public boolean accept(File d, String f) { 
            return f.startsWith(basename);
        }
    });
    int count = 0;
    if (logs.length > 0) {
        for (String name : logs) {
            int n = atoi(name.substring(nameLen));
            if (n >= count) count = n + 1;
        }
    }
    String filename = String.format("%s%d.log", basename, count); 
    File logFile = new File(tmpDir, filename);
    logFile.createNewFile();
    return logFile;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1116640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档