2

我有一个要求,我必须在 sd 卡中创建一个文本文件,然后每次在应用程序中遇到任何异常时,我都必须将其记录到文本文件中。一切都应该发生在一个线程中。

在某些地方,我有一个线程正在运行,这给出了一些异常,在这种情况下,我如何从这个线程启动一个新线程来记录。

我的问题:如何从新线程记录每个异常。我们可以从其他线程开始一个新线程吗?如果我想使用同一个线程将每个日志写入文件,我该如何销毁线程,尽管我知道不建议多次运行一个线程。是否可以在不使用 log4j 的情况下执行此操作。

4

1 回答 1

3

我建议您为整个应用程序设置一个带有工作队列的专用线程,如下所示:

class Logging {
    public static ExecutorService logger = Executors.newSingleThreadExecutor();
}

然后当捕获到异常时:

try {
   ...
} catch(Exception ex) {
   Logging.logger.submit(new LoggingJob(ex));
}

哪里LoggingJob可以是:

class LoggingJob implements Runnable {
    private Exception ex;

    public LoggingJob(Exception ex) {
        this.ex = ex;
    }

    public void run() {
        // write ex to log file
    }
}
于 2012-09-27T13:43:23.297 回答