logmanager -> getloggerrepository
repositoryselector.getloggerrepository
hierarchyh = new hierarchy(new rootlogger((level) level.debug)); = repositoryselector
defaultrepositoryselector(noploggerrepository)
noploggerrepository->noplogger
寫入分析
-------------------------
logger.warn ->
category.warn
category.forcelog
----------------------------
quietwriter.write
this(layout, new outputstreamwriter(os));
---------------------------
這裡就到了propertyconfigurator
-------------------------
初始化
**public
synchronized
void
setfile(string filename,
boolean
boolean
bufferedio,
intbuffersize)
throws
ioexception
reset();
fileoutputstream ostream
=null
;try
catch
(filenotfoundexception ex)
else
} else
}writer fw
=createwriter(ostream);
if(bufferedio)
this
.setqwforfiles(fw);
this
.filename
=filename;
this
=this
.bufferedio
=bufferedio;
this
.buffersize
=buffersize;
writeheader();
loglog.debug(
"setfile ended");
}**protected
outputstreamwriter createwriter(outputstream os)
catch
(ioexception e)
loglog.warn(
"error initializing output writer.");
loglog.warn(
"unsupported encoding?");
}}if(retval
==null
) return
retval;
}什麼時候flush???
。每次操作完,都會flush
if(shouldflush(event)) {
this.qw.flush();
檔案操作是每次new,還是new了之後一直使用?
。 獲取logger的方法是:logger.getlogger => logmanager->defaultrepositoryselector(hierarchy) -> hierarchy.getlogger ->
.logger = factory.makenewloggerinstance(name); defaultcategoryfactory..makenewloggerinstance(name) =
。new logger() extends category
. 這裡使 category的loggerrepository = hierarchy
。如果沒有在配置檔案註明的,就是初始化為console的日誌。
。 void configure() {
logger root = logger.getrootlogger();
new patternlayout(patternlayout.ttcc_conversion_pattern)));
如果沒有配置,則整個日誌系統根本無法執行,所以只有配置了才有效。
寫入日誌的時候,使用了迭代,最終回到了rootlogger。 而getlogger的時候,輸入僅僅是乙個string標籤,作為log的寫入,log最終還是由config初始化
logmanager.static
propertysetter.activated
**中可以看出,是初始化的時候stream就初始了。
小結:logger在初始化的時候,就對stream等全部初始了。 涉及到的關鍵類包括:
outputstreamwriter(outputstream):: writer
filterwriter(writer)
寫入的時候: filterwriter.out.write();
log4j簡單分析
最近在學習開源 學習了log4j,就其中一些知識點分享。針對的是apache log4j 1.2.17 commons logging 1.2。1.log4j中日誌重複列印問題 設定為如下即不會重複列印,最後必須是類名。log4j.additivity.test.testclass false 2....
log4j日誌系統 Log4j
1.1 log4j的三大核心元件 1.2 loggers 記錄器 1.4 layouts 布局 org.apache.log4j.htmllayout 以html 形式布局 org.apache.log4j.patternlayout 可以靈活地指定布局模式 org.apache.log4j.lay...
Log4J學習 十六 Log4j的預設啟動流程一
既然要求我們自己來配置log4j,那麼又會出現相關的問題,不管我們採用哪種配置方式,log4j總會要求我們在應用啟動的最開始,完成log4j的配置,所以我們不得不在乙個靜態類的靜態 塊中完成相關的 配置。這對程式設計師和log4j框架本身的使用,都是乙個不友好的設計。考慮到這些因素,log4j提供了...