具體呼叫過程可以看這裡:
if (!isstarted())
}
/**
* actual writing occurs here.
* method.
* * @since 0.9.0
*/if (!isstarted())
try
// the synchronization prevents the outputstream from being closed while we
// are writing. it also prevents multiple threads from entering the same
// converter. converters assume that they are in a synchronized block.
lock.lock();
try finally
} catch (ioexception ioe)
}
這裡用到了乙個鎖:reentrantlock,輸出日誌之前加鎖,finally裡面解鎖。
writeout方法是這樣的:
用輸出流把日誌寫到磁碟上,最後如果immediateflush是true,則立即flush。immediateflush可以在logback的配置檔案中配置,預設是true。protected void writeout(e event) throws ioexception
public void setlayout(layoutlayout)
public void doencode(e event) throws ioexception
這樣寫日誌的流程就結束了。
另外,這種輸出日誌到控制台的方式是有可能導致執行緒阻塞甚至死鎖的,貌似在壓力比較大的情況可能會出現,跟控制台還有子執行緒的一些設定有關,我還沒有具體研究。
log死鎖還是挺嚴重的,所有執行緒都會卡在logger.info()上,然後執行緒爆滿,記憶體溢位都可能會出現。
除非必要,還是不要往控制台輸出日誌比較好。
tomcat輸出日誌到檔案和控制台
在windows下tomcat的啟動指令碼預設不像unix下的指令碼那樣輸出應用日誌到logs catalina.out,只在console中輸出,如果日誌刷的太快根本沒法找到錯誤資訊。為了把日誌輸出到檔案,需要修改以下指令碼。1 修改startup.bat,把指令碼的倒數第二行 call exec...
python 輸出日誌到檔案和控制台
import logging 第一步,建立乙個logger logger logging.getlogger logger.setlevel logging.info log等級總開關 第二步,建立乙個handler,用於寫入日誌檔案 logfile log2.txt fh logging.file...
python 輸出日誌到檔案和控制台
import logging 第一步,建立乙個logger logger logging.getlogger logger.setlevel logging.info log等級總開關 第二步,建立乙個handler,用於寫入日誌檔案 logfile log2.txt fh logging.file...