第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

擴(kuò)展 log4j/slf4j 記錄器

擴(kuò)展 log4j/slf4j 記錄器

白衣非少年 2021-12-10 10:57:16
我處于多個線程(來自同一個 JVM)正在寫入同一個文件(使用 Logger 進(jìn)行日志記錄)的情況。我需要在某個時候刪除這個文件,下次使用 logger 將創(chuàng)建文件和日志。日志庫是同步的,因此我不需要擔(dān)心并發(fā)日志記錄到同一個文件。但是......我想添加一個操作這個文件的外部操作,這個操作是刪除文件,因此我必須以某種方式將日志記錄(Logger)與這個刪除操作同步,因為我不想同時刪除文件記錄器正在工作。我想到的事情:使用FileChannel.lock鎖定文件,Logger 也會這樣做。我決定反對這個,因為這個:代表整個 Java 虛擬機(jī)持有文件鎖。它們不適合控制同一虛擬機(jī)內(nèi)的多個線程對文件的訪問。這意味著在我的情況下(相同的 JVM,多線程)這不會導(dǎo)致我想要的效果。我有哪些選擇?我在這里錯過了一些重要的東西嗎?也許有一種方法可以使用 Logger 中已有的東西來做到這一點?
查看完整描述

3 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗 獲得超8個贊

您似乎正在尋找日志滾動和日志歸檔功能。日志滾動是 Log4j 和 Logback(SLF4j 也是)的一個共同特性。

您可以配置日志庫以根據(jù)當(dāng)前文件的大小或一天中的時間創(chuàng)建新的日志文件。您可以為滾動文件配置文件名格式,然后讓外部進(jìn)程存檔或刪除舊的滾動日志文件。

您可以參考答案中給出的 Log4j 2 配置。


查看完整回答
反對 回復(fù) 2021-12-10
?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊

我過去在沒有其他選擇的情況下使用的一個技巧只是重命名當(dāng)前日志文件。

重命名后,排隊等待它的任何未完成的日志記錄都會繼續(xù)進(jìn)入重命名的日志記錄。通常,任何新的日志請求都會創(chuàng)建一個新文件。

剩下的就是清理重命名的。您通??梢允褂靡恍┩獠窟M(jìn)程來管理它,或者只要這個進(jìn)程觸發(fā)就刪除任何舊的日志文件。


查看完整回答
反對 回復(fù) 2021-12-10
?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊

文件系統(tǒng)通常由操作系統(tǒng)同步,因此您可以簡單地刪除文件而不必?fù)?dān)心鎖定或任何事情。根據(jù) log4j 鎖定文件的方式,刪除過程可能會失敗,您需要添加一個重試循環(huán)。


int attempts = 3;

final File logfile = new File(theLogFilePath);

while ((attempts > 0) && logfile.exists() && !logfile.delete()) {

  --attempts;

  try {

    Thread.sleep(1000);

  } catch (InterruptedException e) {

    attempts = 0;

  }

}

這不是完全干凈的代碼,但是無論如何你所做的都不干凈。;)


您相當(dāng)粗魯?shù)馗蓴_了日志記錄過程,但由于用戶也可以隨時刪除該文件,因此 log4j 應(yīng)該優(yōu)雅地處理它。最壞的情況是,我的猜測是即將被記錄的消息會丟失,但考慮到您無論如何都只是刪除了日志文件,這可能不是問題。


有關(guān)更清晰的實現(xiàn),請參閱此問題。


查看完整回答
反對 回復(fù) 2021-12-10
  • 3 回答
  • 0 關(guān)注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號