golang第三方日志包seelog配置文件详解

开发任何项目,都离不开日志,配好自己的项目日志输出,往往是开发项目的前提。在golang中,seelog应该是比较有名的日志处理包了,功能非常强大,seelog官方文档

一、seelog主要功能

下面我们看看seelog有啥强大

  • 设置不同级别的日志;
  • 输出到终端或文件;
  • 过滤指定级别日志;
  • 定义多种不同的日志输出格式;
  • 根据触发日志的文件名或者函数名来区别输出日志;
  • 通过 SMTP 或 TCP 转发日志(网络转发日志);
  • 滚动日志文件(过期日志自动清除)。

二、安装seelog

$ go get github.com/cihub/seelog

三、使用seelog

我们先看看一个官方的demo

package main

import (
    log "github.com/cihub/seelog"
)

func main() {
    defer log.Flush()
    log.Info("Hello from Seelog!")
}

很简单是吧,导入包,就直接可以用了,下面我们看看如何通过配置文件高度定制我们的日志。

import (
    log "github.com/cihub/seelog"
)

func SetupLogger() {
    logger, err := log.LoggerFromConfigAsFile("seelog.xml")
    if err != nil {
        return
    }

    log.ReplaceLogger(logger)
}

seelog的配置文件一般用xml,下面我们看seelog.xml配置文件的大体框架


    
        ... />
        ... />
        ...
    
    
        
            
            ... />
            ... />
            
                ...
            
            
                ...
            
            ... />
        
        
            ...
        
    
    
        ... />
        ... />
        ...
    

对框架有了解后,下面我们拿官方的实例配置文件来做说明:https://github.com/cihub/seelog/wiki/Example-config


<seelog type="asynctimer" asyncinterval="5000000" minlevel="debug" maxlevel="error">
    <exceptions>
        
        <exception funcpattern="*main.test*Something*" minlevel="info"/>
        <exception filepattern="*main.go" minlevel="error"/>
    exceptions>

    
    <outputs formatid="main">
        
        <console/>

        
        <splitter formatid="format1">
            
            <file path="log.log"/>
            <file path="log2.log"/>
        splitter>
        <splitter formatid="format2">
            <file path="log3.log"/>
            <file path="log4.log"/>
        splitter>

        
        <rollingfile formatid="someformat" type="size" filename="./log/roll.log" maxsize="100" maxrolls="5" />

        
        <buffered formatid="testlevels" size="10000" flushperiod="1000">
            <file path="./log/bufFileFlush.log"/>
        buffered>

        
        <filter levels="error">
            <file path="./log/error.log"/>
            <smtp senderaddress="[email protected]" 
                  sendername="Automatic notification service" 
                  hostname="mail.none.org" 
                  hostport="587" 
                  username="nns" 
                  password="123">
                <recipient address="[email protected]"/>
                <recipient address="[email protected]"/>
            smtp>
            
            <conn net="tcp4" addr="server.address:5514" tls="true" insecureskipverify="true" />
        filter>

    outputs>

    
    <formats>
        <format id="main" format="%Date(2006 Jan 02/3:04:05.000000000 PM MST) [%Level] %Msg%n"/>
        <format id="someformat" format="%Ns [%Level] %Msg%n"/>
        <format id="testlevels" format="%Level %Lev %LEVEL %LEV %l %Msg%n"/>
        <format id="usetags" format="<msg>%Msg</time>"/>
        <format id="format1" format="%Date/%Time [%LEV] %Msg%n"/>
        <format id="format2" format="%File %FullPath %RelFile %Msg%n"/>
    formats>
seelog>

初次接触难免会觉得配置文件的内容有点多,难以理解,其实只要我们理解它配置文件的大体框架,然后自己试着更改配置文件,看看输出什么,就很快明白了。


<seelog type="asynctimer" asyncinterval="1000000" minlevel="debug" maxlevel="error">
    <outputs formatid="main">
        
        <console/>
    outputs>
    <formats>
        
        <format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - l%Line - %Msg%n"/>
    formats>
seelog>




<seelog type="asynctimer" asyncinterval="1000000" minlevel="debug" maxlevel="error">
    <outputs formatid="main">
        <console/>
        
        <splitter formatid="format1">
            <file path="log.log"/>
        splitter>
    outputs>
    <formats>
        
        <format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - l%Line - %Msg%n"/>
        <format id="format1" format="%Date(2006 Jan 02/3:04:05.000000000 PM MST) [%Level] %Msg%n"/>
    formats>
seelog>

你可能感兴趣的:(golang)