45//
46if (!renameSucceeded) {
47try {
48this.setFile(fileName, true, bufferedIO, bufferSize);
49} catch (IOException e) {
50if (e instanceof InterruptedIOException) {
51Thread.currentThread().interrupt();
52}
53LogLog.error("setFile(" + fileName
54+ ", true) call failed.", e);
55}
56}
57}
58}
59
60//
61// if all renames were successful, then
62//
63if (renameSucceeded) {
64try {
65this.setFile(fileName, false, bufferedIO, bufferSize);
66nextRollover = 0;
67} catch (IOException e) {
68if (e instanceof InterruptedIOException) {
69Thread.currentThread().interrupt();
70}
71LogLog.error("setFile(" + fileName + ", false) call failed.", e);
72}
73}
74 }
75
76 public synchronized void setFile(String fileName, boolean append,
77boolean bufferedIO, int bufferSize) throws IOException {
78super.setFile(fileName, append, this.bufferedIO, this.bufferSize);
79if (append) {
80File f = new File(fileName);
81((CountingQuietWriter) qw).setCount(f.length());
82}
83 }
84 protected void setQWForFiles(Writer writer) {
85this.qw = new CountingQuietWriter(writer, errorHandler);
86 }
87 protected void subAppend(LoggingEvent event) {
88super.subAppend(event);
89if (fileName != null && qw != null) {
90long size = ((CountingQuietWriter) qw).getCount();
91if (size >= maxFileSize && size >= nextRollover) {
92rollOver();
93}
94}
95 }
AsyncAppender类
AsyncAppender顾名思义,就是异步的调用Appender中的doAppend()方法。有多种方法实现这样的功能,比如每当调用doAppend()方法时,doAppend()方法内部启动一个线程来处理这一次调用的逻辑,这个线程可以是新建的线程也可以是线程池,然而我们知道线程是一个比较耗资源的实体,为每一次的操作都创建一个新的线程,而这个线程在这一次调用结束后就不再使用,这种模式是非常不划算的,性能低下;而且即使在这里使用线程池,也会导致在非常多请求同时过来时引起消耗大量的线程池中的线程或者因为线程池已满而阻塞请求。因而这种直接使用线程去处理每一次的请求是不可取的。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29497-26.html
轰一炮会怎样呢
如果钱比较闲放招财宝一年有500多