golang 的一個(gè)日志模塊

日志模塊是使用的 github.com/op/go-logging 這里只是對這個(gè)模塊再次重鑄一下
獲取依賴包

go get github.com/op/go-logging

直接附上代碼

package log

import (
    "io"
    "os"
    "path"

    logging "github.com/op/go-logging"
)

/**
 *日志級別
 */
const (
    critical int = iota
    err_or
    warning
    notice
    info
    debug
)

var (
    // 日志管理器
    mlog *Logger
    /**
     * 日志輸出格式
     */
    logFormat = []string{
        `%{shortfunc} ? %{level:.4s} %{message}`,
        `%{time:15:04:05.00} %{shortfunc} ? %{level:.4s} %{id:03x} %{message}`,
        `%{color}%{time:15:04:05.00} %{shortfunc} %{shortfile} ? %{level:.4s} %{id:03x}%{color:reset} %{message}`,
    }

    /**
     * 日志級別與 string類型映射
     */
    LogLevelMap = map[string]int{
        "CRITICAL": critical,
        "ERROR":    err_or,
        "WARNING":  warning,
        "NOTICE":   notice,
        "INFO":     info,
        "DEBUG":    debug,
    }
)

type Logger struct {
    log      *logging.Logger
    level    string
    filePath string
    ModeName string
    format   int
}

/**
 * 初始化日志
 * @param logLevel The arguments could be INFO, DEGUE, ERROR
 */
func Init(logLevel string) {
    mlog = newLog(logLevel)
    return
}

func newLog(level string) *Logger {
    log := new(Logger)
    log.level = level
    log.filePath = "./log"
    log.ModeName = "ville"
    log.format = 2
    log.log = logging.MustGetLogger(log.ModeName)
    log.AddLogBackend()
    return log
}
/**
 *添加日志輸出終端拾氓,可以是文件,控制臺涧尿,還有網(wǎng)絡(luò)輸出等润文。
 */
func (l *Logger) AddLogBackend() {
    l.log.ExtraCalldepth = 2
    // 打開文件輸出終端
    // backend1 := l.getFileBackend()
    backend2 := l.getStdOutBackend()
    logging.SetBackend(backend2)
    return
}

func (l *Logger) getFileBackend() logging.LeveledBackend {
    //判斷是否存在該文件夾
    if err := os.MkdirAll(l.filePath, 0777); err != nil {
        panic(err)
    }
    // 打開一個(gè)文件
    file, err := os.OpenFile(path.Join(l.filePath, l.ModeName+"_info.log"), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        panic(err)
    }
    backend := l.getLogBackend(file, LogLevelMap[l.level])
    logging.SetBackend(backend)
    return backend
}

func (l *Logger) getStdOutBackend() logging.LeveledBackend {
    bked := l.getLogBackend(os.Stderr, LogLevelMap[l.level])
    return bked
}

/**
 * 獲取終端
 */
func (l *Logger) getLogBackend(out io.Writer, level int) logging.LeveledBackend {
    backend := logging.NewLogBackend(out, "", 1)
    format := logging.MustStringFormatter(logFormat[2])
    backendFormatter := logging.NewBackendFormatter(backend, format)
    backendLeveled := logging.AddModuleLevel(backendFormatter)
    backendLeveled.SetLevel(logging.Level(level), "")
    return backendLeveled
}

func (l *Logger) logI(infmt string, args ...interface{}) {
    l.log.Infof(infmt, args...)
    return
}
func (l *Logger) logE(infmt string, args ...interface{}) {
    l.log.Errorf(infmt, args...)
    return
}
func (l *Logger) logW(infmt string, args ...interface{}) {
    l.log.Warningf(infmt, args...)
    return
}
func (l *Logger) logD(infmt string, args ...interface{}) {
    l.log.Debugf(infmt, args...)
    return
}

func LogI(fmtstr string, args ...interface{}) {
    mlog.logI(fmtstr, args...)
    return
}

func LogW(fmtstr string, args ...interface{}) {
    mlog.logW(fmtstr, args...)
    return
}

func LogE(fmtstr string, args ...interface{}) {
    mlog.logE(fmtstr, args...)
    return
}

func LogD(fmtstr string, args ...interface{}) {
    mlog.logD(fmtstr, args...)
    return
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末识颊,一起剝皮案震驚了整個(gè)濱河市前标,隨后出現(xiàn)的幾起案子品抽,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜓氨,死亡現(xiàn)場離奇詭異聋袋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)语盈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門舱馅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缰泡,“玉大人刀荒,你說我怎么就攤上這事〖” “怎么了缠借?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宜猜。 經(jīng)常有香客問我泼返,道長,這世上最難降的妖魔是什么姨拥? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任绅喉,我火速辦了婚禮,結(jié)果婚禮上叫乌,老公的妹妹穿的比我還像新娘柴罐。我一直安慰自己,他們只是感情好憨奸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布革屠。 她就那樣靜靜地躺著,像睡著了一般排宰。 火紅的嫁衣襯著肌膚如雪似芝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天板甘,我揣著相機(jī)與錄音党瓮,去河邊找鬼。 笑死盐类,一個(gè)胖子當(dāng)著我的面吹牛麻诀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播傲醉,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蝇闭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硬毕?” 一聲冷哼從身側(cè)響起呻引,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吐咳,沒想到半個(gè)月后逻悠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體元践,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年童谒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了单旁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饥伊,死狀恐怖象浑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琅豆,我是刑警寧澤愉豺,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站茫因,受9級特大地震影響蚪拦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冻押,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一驰贷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洛巢,春花似錦括袒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狈邑,卻和暖如春城须,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背米苹。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工糕伐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蘸嘶。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓良瞧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親训唱。 傳聞我的和親對象是個(gè)殘疾皇子褥蚯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評論 25 707
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料况增? 從這篇文章中你...
    hw1212閱讀 12,714評論 2 59
  • From:Python之日志處理(logging模塊) - 云游道士 - 博客園 https://www.cnbl...
    vigny的先生閱讀 2,684評論 3 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理赞庶,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 集合 體系結(jié)構(gòu)collection:list歧强,queue澜薄,set map list有序并且可以重復(fù)的集合 ;arr...
    7183閱讀 136評論 0 3