Go中的log

log模塊在go中既可以顯示打印簇捍,也可以輸出到文件中記錄日志。
看一段代碼就能明白:

package main

import (
    "fmt"
    "log"
    "os"
)

func TestLog() {
    fmt.Println("begin TestLog ...")
    file, err := os.Create("test.log")      // 創(chuàng)建日志文件
    if err != nil {
        // 打印日志 并退出程序
        log.Fatalln("fail to create test.log file!")
    }
    // 創(chuàng)建logger對(duì)象 這種方式會(huì)顯示觸發(fā)日志文件行數(shù)
    logger := log.New(file, "", log.LstdFlags|log.Llongfile)
    log.Println(" log.Println 1.Println log with log.LstdFlags ...")
    logger.Println("logger.Println 1.Println log with log.LstdFlags ...")

    logger.SetFlags(log.LstdFlags)      // 設(shè)置每行日志打印格式  僅顯示時(shí)間

    log.Println("log.Println  2.Println log without log.LstdFlags ...")
    logger.Println("logger.Println  2.Println log without log.LstdFlags ...")

    //log.Panicln("3.std Panicln log without log.LstdFlags ...")    // 執(zhí)行會(huì)報(bào)錯(cuò)并終止
    //fmt.Println("3 Will this statement be execute ?")
    //logger.Panicln("3.Panicln log without log.LstdFlags ...")

    log.Println("log  4.Println log without log.LstdFlags ...")
    logger.Println("logger  4.Println log without log.LstdFlags ...")

    log.Fatal("5.std Fatal log without log.LstdFlags ...")  // 下面的不會(huì)打印,此行會(huì)終止程序
    fmt.Println("5 Will this statement be execute ?")
    logger.Fatal("5.Fatal log without log.LstdFlags ...")
}

func main() {
    TestLog()
}

顯示結(jié)果:

屏幕:
2017/08/25 10:58:08  log.Println 1.Println log with log.LstdFlags ...
2017/08/25 10:58:08 log.Println  2.Println log without log.LstdFlags ...
2017/08/25 10:58:08 log  4.Println log without log.LstdFlags ...
2017/08/25 10:58:08 5.std Fatal log without log.LstdFlags ...
exit status 1
文件:
2017/08/25 10:58:08 E:/GO_PATH/src/TEST/logtest.go:19: logger.Println 1.Println log with log.LstdFlags ...
2017/08/25 10:58:08 logger.Println  2.Println log without log.LstdFlags ...
2017/08/25 10:58:08 logger  4.Println log without log.LstdFlags ...

與fmt最大的區(qū)別

log包是并發(fā)goroutine安全的曾我,而fmt不是
先看一個(gè)例子:

func main() {
    log.Printf(" %s", "log print 11111111111111111")
    log.Printf(" %s", "log print 22222222222222222")

    fmt.Println("fmt print 11111111111")
    fmt.Println("fmt print 22222222222")

}

結(jié)果:

2017/08/25 11:06:38  log print 11111111111111111
fmt print 11111111111
2017/08/25 11:06:38  log print 22222222222222222
fmt print 22222222222
2017/08/25 11:18:06  log print 11111111111111111
2017/08/25 11:18:06  log print 22222222222222222
fmt print 11111111111
fmt print 22222222222
fmt print 11111111111
fmt print 22222222222
2017/08/25 11:18:24  log print 11111111111111111
2017/08/25 11:18:24  log print 22222222222222222

由上面執(zhí)行的三種結(jié)果可以看出,log的執(zhí)行是并發(fā)的
我們可以查看下log中一段源代碼:

type Logger struct {
    mu     sync.Mutex // ensures atomic writes; protects the following fields
    prefix string     // prefix to write at beginning of each line
    flag   int        // properties
    out    io.Writer  // destination for output
    buf    []byte     // for accumulating text to write
}

有5個(gè)成員:

  • prefix: Log前綴的
  • flag: Log頭標(biāo)簽
  • out : Log的輸出位置
  • buf: 存放即將刷入out的內(nèi)容穿铆,就是日志的內(nèi)容
  • mu: 實(shí)現(xiàn)線程的安全您单,當(dāng)有多個(gè)goroutine同時(shí)往一個(gè)目的刷內(nèi)容的時(shí)候,通過mutex保證每次寫入是一條完整的信息

什么是線程安全呢荞雏? 這個(gè)可以借鑒
http://blog.csdn.net/love_java_cc/article/details/52162366

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虐秦,一起剝皮案震驚了整個(gè)濱河市平酿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悦陋,老刑警劉巖蜈彼,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俺驶,居然都是意外死亡幸逆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門暮现,熙熙樓的掌柜王于貴愁眉苦臉地迎上來还绘,“玉大人,你說我怎么就攤上這事栖袋∨那辏” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵塘幅,是天一觀的道長(zhǎng)昔案。 經(jīng)常有香客問我,道長(zhǎng)电媳,這世上最難降的妖魔是什么踏揣? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮匾乓,結(jié)果婚禮上捞稿,老公的妹妹穿的比我還像新娘。我一直安慰自己钝尸,他們只是感情好括享,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著珍促,像睡著了一般铃辖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猪叙,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天娇斩,我揣著相機(jī)與錄音,去河邊找鬼穴翩。 笑死犬第,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芒帕。 我是一名探鬼主播歉嗓,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼背蟆!你這毒婦竟也來了鉴分?” 一聲冷哼從身側(cè)響起哮幢,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎志珍,沒想到半個(gè)月后橙垢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伦糯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年柜某,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敛纲。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喂击,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淤翔,到底是詐尸還是另有隱情惭等,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布办铡,位于F島的核電站,受9級(jí)特大地震影響琳要,放射性物質(zhì)發(fā)生泄漏寡具。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一稚补、第九天 我趴在偏房一處隱蔽的房頂上張望童叠。 院中可真熱鬧,春花似錦课幕、人聲如沸厦坛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杜秸。三九已至,卻和暖如春润绎,著一層夾襖步出監(jiān)牢的瞬間撬碟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工莉撇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呢蛤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓棍郎,卻偏偏與公主長(zhǎng)得像其障,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涂佃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容