java - Log4j - 每个线程的文件日志

标签 java multithreading log4j

我有一个程序,一旦启动,它将多次执行流程(涉及的类很少)- 每次都在不同的线程中。流程是相同的 - 只是每次调用时向其发送不同的参数。

每个流将在自己的线程上执行。

我希望能够为每个线程定义一个文件追加程序(本质上是文件日志)——因此一旦流程开始,它就会以编程方式创建自己的日志文件并写入其中。

搜索过,但找不到简单的解决方案 你能帮忙吗?

最佳答案

您可以通过编程方式执行此操作。例如:

class Task implements Runnable {

    private final String path;
    private final String name;

    public Task(String path, String name) {
        this.path = path;
        this.name = name;
    }

    public void run() {
        // Create file appender
        FileAppender appender = new FileAppender();
        appender.setFile(path);
        appender.setLayout(new PatternLayout("%d [%t] %-5p %c - %m%n"));
        appender.activateOptions();

        // Get logger and add appender
        Logger logger = Logger.getLogger(name);
        logger.setAdditivity(false);
        logger.addAppender(appender);

        // Task
        logger.info("Hello World!");

        // Remove appender
        logger.removeAppender(appender);
    }

}

public static void main(String[] args) {
    new Thread(new Task("logs/A.log", "com.company.A")).start();
    new Thread(new Task("logs/B.log", "com.company.B")).start();
}

关于java - Log4j - 每个线程的文件日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28145162/

相关文章:

java - 如何以编程方式确定我们在桌面上而不是在应用程序服务器上(显示弹出窗口)?

java - ExecutorService 的奇怪行为

multithreading - Apache ThreadsPerChild 增加不适用

ruby-on-rails - Rails 最佳实践 : background process/thread?

java - Log4J dailyrolling fileappender,控制滚动文件名

java - Log4J - SQL 数据截断

java - 将 Short.MAX_VALUE 递增(溢出)为零,而不是 Short.MIN_VALUE

indexing - 如何使用 java API 在现有的 elasticsearch 索引中添加更多文档?

java - 并发访问不同步的 Java ArrayList 的影响

java - 如何向 Spring Boot 应用程序添加日志记录属性