我的疑问是:
1、系统运行正在运行中,这个时候我把log4j的产生日志文件删除了,log4j会不会再次产生日志文件?
2、日志文件删除之后,对系统的运行会产生什么样的影响?
答疑:
1、
public void debug(Object message)
{
if (this.repository.isDisabled(10000))
return;
if (Level.DEBUG.isGreaterOrEqual(getEffectiveLevel()))
forcedLog(FQCN, Level.DEBUG, message, null);
}
2、
protected void forcedLog(String fqcn, Priority level, Object message, Throwable t)
{
callAppenders(new LoggingEvent(fqcn, this, level, message, t));
}
3、
public void callAppenders(LoggingEvent event)
{
int writes = 0;
for (Category c = this; c != null; c = c.parent)
{
synchronized (c) {
if (c.aai != null) {
writes += c.aai.appendLoopOnAppenders(event);
}
if (!(c.additive)) {
break label67:
}
}
}
if (writes == 0)
label67: this.repository.emitNoAppenderWarning(this);
}
4、
public int appendLoopOnAppenders(LoggingEvent event)
{
int size = 0;
if (this.appenderList != null) {
size = this.appenderList.size();
for (int i = 0; i < size; ++i) {
Appender appender = (Appender)this.appenderList.elementAt(i);
appender.doAppend(event);
}
}
return size;
}
5、
public synchronized void doAppend(LoggingEvent event)
{
if (this.closed) {
LogLog.error("Attempted to append to closed appender named [" + this.name + "].");
return;
}
if (!(isAsSevereAsThreshold(event.getLevel()))) {
return;
}
Filter f = this.headFilter;
while (f != null) {
switch (f.decide(event))
{
case -1:
return;
case 1:
break;
case 0:
f = f.next;
}
}
append(event);
}
6、
public void append(LoggingEvent event)
{
if (!(checkEntryConditions())) {
return;
}
subAppend(event);
}
7、
protected void subAppend(LoggingEvent event)
{
this.qw.write(this.layout.format(event));
if (this.layout.ignoresThrowable()) {
String[] s = event.getThrowableStrRep();
if (s != null) {
int len = s.length;
for (int i = 0; i < len; ++i) {
this.qw.write(s[i]);
this.qw.write(Layout.LINE_SEP);
}
}
}
if (this.immediateFlush)
this.qw.flush();
}
8、
public void write(String string)
{
try {
this.out.write(string);
} catch (IOException e) {
this.errorHandler.error("Failed to write [" + string + "].", e, 1);
}
}
9、
public void error(String message, Exception e, int errorCode, LoggingEvent event)
{
if (this.firstTime) {
LogLog.error(message, e);
this.firstTime = false;
}
}
如果只是把日志文件删除了,系统还是可以自动生成的,但如果连存放日志文件的目录都删除了,就会出错,但只会第一次出错的时候在控制台打印错误日志,后续将不再打印。
1、系统运行正在运行中,这个时候我把log4j的产生日志文件删除了,log4j会不会再次产生日志文件?
2、日志文件删除之后,对系统的运行会产生什么样的影响?
答疑:
1、
public void debug(Object message)
{
if (this.repository.isDisabled(10000))
return;
if (Level.DEBUG.isGreaterOrEqual(getEffectiveLevel()))
forcedLog(FQCN, Level.DEBUG, message, null);
}
2、
protected void forcedLog(String fqcn, Priority level, Object message, Throwable t)
{
callAppenders(new LoggingEvent(fqcn, this, level, message, t));
}
3、
public void callAppenders(LoggingEvent event)
{
int writes = 0;
for (Category c = this; c != null; c = c.parent)
{
synchronized (c) {
if (c.aai != null) {
writes += c.aai.appendLoopOnAppenders(event);
}
if (!(c.additive)) {
break label67:
}
}
}
if (writes == 0)
label67: this.repository.emitNoAppenderWarning(this);
}
4、
public int appendLoopOnAppenders(LoggingEvent event)
{
int size = 0;
if (this.appenderList != null) {
size = this.appenderList.size();
for (int i = 0; i < size; ++i) {
Appender appender = (Appender)this.appenderList.elementAt(i);
appender.doAppend(event);
}
}
return size;
}
5、
public synchronized void doAppend(LoggingEvent event)
{
if (this.closed) {
LogLog.error("Attempted to append to closed appender named [" + this.name + "].");
return;
}
if (!(isAsSevereAsThreshold(event.getLevel()))) {
return;
}
Filter f = this.headFilter;
while (f != null) {
switch (f.decide(event))
{
case -1:
return;
case 1:
break;
case 0:
f = f.next;
}
}
append(event);
}
6、
public void append(LoggingEvent event)
{
if (!(checkEntryConditions())) {
return;
}
subAppend(event);
}
7、
protected void subAppend(LoggingEvent event)
{
this.qw.write(this.layout.format(event));
if (this.layout.ignoresThrowable()) {
String[] s = event.getThrowableStrRep();
if (s != null) {
int len = s.length;
for (int i = 0; i < len; ++i) {
this.qw.write(s[i]);
this.qw.write(Layout.LINE_SEP);
}
}
}
if (this.immediateFlush)
this.qw.flush();
}
8、
public void write(String string)
{
try {
this.out.write(string);
} catch (IOException e) {
this.errorHandler.error("Failed to write [" + string + "].", e, 1);
}
}
9、
public void error(String message, Exception e, int errorCode, LoggingEvent event)
{
if (this.firstTime) {
LogLog.error(message, e);
this.firstTime = false;
}
}
如果只是把日志文件删除了,系统还是可以自动生成的,但如果连存放日志文件的目录都删除了,就会出错,但只会第一次出错的时候在控制台打印错误日志,后续将不再打印。