java 将Log4j2输出打印到JTextArea

jhkqcmku  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(74)

我有一个JTextArea在我的程序,我想显示程序的日志。我做了一些研究,在Log4j2文档中找到了OutputStreamAppender,我假设可以使用它将日志输出到OutputStream,然后将其通过管道传输到JTextArea。不幸的是,没有太多的文档(至少我能找到)。我的思路对吗?如果是,如何使用OutputStreamAppender?如果没有,我该怎么办?我不想创建自己的Appender。
谢谢

tyg4sfes

tyg4sfes1#

也许可以尝试一些类似的东西(快速而肮脏-你肯定想防止无限循环):

import java.time.format.*;
import java.time.*;
import java.util.Comparator;
import java.nio.file.*;
import java.io.IOException;

public class FName {
    public static void main(String[] args) {
        try {
            //System.out.println(FName.getLatestLogFileName(Path.of("/tmp")));
            System.out.println(FName.findLatestLogFileName(Path.of("/tmp")));
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public static Path findLatestLogFileName(Path logsDir) throws Exception {
        // Tighten this pattern up as necessary
        final String LOGFILE_PAT =".*\\.log";
        return Files.find(logsDir, 1, (p, attr) ->p.getFileName().toString().matches(LOGFILE_PAT)).
            sorted(Comparator.comparingLong(p ->p.toFile().lastModified())).
            reduce((first, second) -> second).
            orElse(null);
    }

    public static Path getLatestLogFileName(Path logsDir) {
        Path result = null;
        LocalDateTime ldt = LocalDateTime.now();
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMMM uuuu HH.mm.ss");
        boolean foundLogFile = false;
        while (result == null) {
            Path test = logsDir.resolve(Path.of(dtf.format(ldt) + ".log"));
            if (Files.exists(test)) {
                result = test;
            } else {
                ldt = ldt.minusSeconds(1);
            }
        }
        return result;
    }
}

相关问题