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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 macOS 上的 logrus/lumberjack 中自動(dòng)重新創(chuàng)建日志文件

如何在 macOS 上的 logrus/lumberjack 中自動(dòng)重新創(chuàng)建日志文件

Go
紫衣仙女 2022-10-10 18:05:00
我在 macOS 上使用logrus和lumberjack作為日志文件。logger := &lumberjack.Logger{    // Log path    Filename: filepath.Join(logFolder, "xxx.log"),    // Log size MB    MaxSize: 10,    // Backup count    MaxBackups: 3,    // expire days    // MaxAge: 28,    // gzip compress    Compress: false,}logrus.SetOutput(logger)當(dāng)我啟動(dòng)我的應(yīng)用程序時(shí),它將按預(yù)期創(chuàng)建日志文件。但是,當(dāng)我的應(yīng)用程序運(yùn)行時(shí),我手動(dòng)刪除了日志文件,因?yàn)槲业膽?yīng)用程序繼續(xù)運(yùn)行,我希望它會(huì)重新創(chuàng)建日志文件,但是,日志文件沒(méi)有創(chuàng)建。但是如果我重新啟動(dòng)我的應(yīng)用程序,將再次創(chuàng)建日志文件。那么我應(yīng)該怎么做才能讓我的應(yīng)用程序(繼續(xù)運(yùn)行)在刪除日志文件時(shí)重新創(chuàng)建和寫(xiě)入日志文件。提前致謝。
查看完整描述

3 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

這是使用fsnotifylib 監(jiān)視日志文件的另一種方法。fsnotify監(jiān)控xxx.log所在的目錄,告訴lumberjackRotate()什么時(shí)候刪除xxx.log。


import (

    "fmt"

    "log"

    "path/filepath"

    "time"


    "github.com/fsnotify/fsnotify"

    "gopkg.in/natefinch/lumberjack.v2"

)


func main() {

    logPath := "./xxx.log"

    logName := filepath.Base(logPath)


    logger := &lumberjack.Logger{

        // Log path

        Filename: logPath,

        // Log size MB

        MaxSize: 10,

        // Backup count

        MaxBackups: 3,

        // expire days

        // MaxAge: 28,

        // gzip compress

        Compress: false,

    }


    watcher, err := fsnotify.NewWatcher()

    if err != nil {

        log.Fatal(err)

    }

    defer watcher.Close()


    go func() {

        for event := range watcher.Events {

            if event.Op&fsnotify.Remove == fsnotify.Remove &&

                event.Name == logName {

                log.Println("rotate log", event.Name)

                logger.Rotate()

            }

        }

    }()


    err = watcher.Add(filepath.Dir(logPath))

    if err != nil {

        log.Fatal(err)

    }


    for {

        logger.Write([]byte(fmt.Sprintf("current time:%v\n", time.Now())))

        time.Sleep(3 * time.Second)

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-10-10
?
天涯盡頭無(wú)女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

問(wèn)題”

基于所述行為,我假設(shè)這發(fā)生在為文件實(shí)現(xiàn) POSIX 兼容行為的操作系統(tǒng)上(因此它運(yùn)行在具有 Unix 遺產(chǎn)的某些內(nèi)核上 - 例如 *BSD 或 Linux,或者它是 Mac OS 系統(tǒng))。在這些系統(tǒng)上,從文件系統(tǒng)中刪除文件對(duì)該文件系統(tǒng)上的文件存儲(chǔ)沒(méi)有任何影響——只要它至少在一個(gè)正在運(yùn)行的進(jìn)程中打開(kāi)。
具體來(lái)說(shuō),要引用POSIX 文檔open(2)

如果文件的鏈接計(jì)數(shù)為0,則當(dāng)與該文件關(guān)聯(lián)的所有文件描述符都關(guān)閉時(shí),該文件占用的空間將被釋放,該文件將不再可訪(fǎng)問(wèn)。

打開(kāi)文件被認(rèn)為將其鏈接計(jì)數(shù)增加 1,從其文件系統(tǒng)中刪除文件與將鏈接計(jì)數(shù)減 1 相同。您可以在此處
閱讀有關(guān)鏈接計(jì)數(shù)的更多信息。

假設(shè)您正在使用的日志記錄包保持日志文件處于打開(kāi)狀態(tài),因此您只需從文件系統(tǒng)的目錄中刪除文件名,但這絕不會(huì)影響日志記錄過(guò)程。
此外,當(dāng)任何文件名消失時(shí),不會(huì)通知打開(kāi)文件的進(jìn)程(在類(lèi) Unix 系統(tǒng)上,一個(gè)文件可能同時(shí)有多個(gè)名稱(chēng)——請(qǐng)閱讀硬鏈接)。

解決方案

通常,對(duì)于類(lèi) Unix 操作系統(tǒng),有一種方法可以明確要求進(jìn)程重新打開(kāi)其日志文件。
偶然地,SIGUSR1為此使用了一個(gè)信號(hào),因此您可以設(shè)置一個(gè)處理程序(通過(guò)signal.Notify)為此類(lèi)信號(hào)設(shè)置一個(gè)處理程序,然后將您的日志輪換代碼設(shè)置kill -USR1為正在運(yùn)行的進(jìn)程,以告訴它重新打開(kāi)日志文件,這將是重新創(chuàng)建。

當(dāng)然,可以實(shí)施更多涉及的方案,因?yàn)槟梢允褂萌魏涡问降?a >IPC將該命令傳達(dá)給正在運(yùn)行的進(jìn)程。


查看完整回答
反對(duì) 回復(fù) 2022-10-10
?
MMTTMM

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

刪除 xxx.log 后,您可以向正在運(yùn)行的進(jìn)程發(fā)送一個(gè)信號(hào),然后下面的代碼將處理該信號(hào)并告訴伐木工人創(chuàng)建新的日志文件。


sigs := make(chan os.Signal, 1)

signal.Notify(sigs, syscall.SIGUSR1)


go func() {

    for _ = range sigs {

        // call Rotate() method of lumberjack to create new log file

        logger.Rotate()

    }

}()

用于刪除和輪換日志的命令


# delete log file

rm path/to/xxx.log

# this command would not kill your process, just send a signal to it.

kill -USR1 <your process id>


查看完整回答
反對(duì) 回復(fù) 2022-10-10
  • 3 回答
  • 0 關(guān)注
  • 240 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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