Log4j - 每个线程的文件日志

时间:2015-01-26 05:25:42

标签: java multithreading log4j

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

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

我希望能够为每个线程定义文件appender(本质上是文件日志) - 所以一旦流程启动,它就会以编程方式创建自己的日志文件并写入它。

搜索它但无法找到一个简单的解决方案 你能帮忙吗?

TA

4 个答案:

答案 0 :(得分:3)

您可以通过编程方式执行此操作。 e.g:

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();
}

答案 1 :(得分:0)

  1. 为log4j文件中的每个日志文件定义处理程序,例如,这样:

                                                                                     

  2. 现在在同一个xml文件中添加这样的内容:

        <logger category="a.b.c.d">
            <level name="INFO"/>
            <handlers>
                <handler name="a.b.c.d_FILE"/>
            </handlers>
    

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以自己实施:

RandomAccessFile logfile;

public void initLogger(String logPath) {
    File fl = new File(logPath);
    long fileLength = fl.length();
    logfile = new RandomAccessFile(fl, "rw");
    logfile.seek(fileLength);
}

public void log(String text) throws IOException {
    logfile.writeChars(text);
    logfile.writeChar('\n');
}