zoukankan      html  css  js  c++  java
  • 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配置文件的大体框架

    <seelog>
    <exceptions>
    <exception ... />
    <exception ... />
    ...
    </exceptions>
    <outputs>
    <splitter>
    <console/>
    <file ... />
    <rollingfile ... />
    <smtp>
    ...
    </smtp>
    <buffered>
    ...
    </buffered>
    <conn ... />
    </splitter>
    <filter>
    ...
    </filter>
    </outputs>
    <formats>
    <format ... />
    <format ... />
    ...
    </formats>
    </seelog>

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

    <!-- type 设置记录器类型 https://github.com/cihub/seelog/wiki/Logger-types-reference
    minlevel 设置日志最低级别; maxlevel 设置日志的最高级别
    也可以通过 <seelog levels="trace,info,critical"> 设置日记级别 -->
    <seelog type="asynctimer" asyncinterval="5000000" minlevel="debug" maxlevel="error">
    <exceptions>
    <!-- <exception> 是为特定的程序文件(filepattern)或函数(funcpattern)设定特殊的日志规则 -->
    <exception funcpattern="*main.test*Something*" minlevel="info"/>
    <exception filepattern="*main.go" minlevel="error"/>
    </exceptions>

    <!-- <outputs> formatid 指定日志输出的格式(格式在<formats>标签中定义) -->
    <outputs formatid="main">
    <!-- <console> 标签表示输出到终端 -->
    <console/>

    <!-- <splitter> 用于细分<outputs>日志格式,内部支持:file(文件), rollingfile(滚动文件,自动清除过期),
    buffered(日志写到内存再写到文件), smtp(发送日志到邮件), con(网络转发) -->
    <splitter formatid="format1">
    <!-- log.log, log2.log将按<formats>标签中的id="format1"格式写入 -->
    <file path="log.log"/>
    <file path="log2.log"/>
    </splitter>
    <splitter formatid="format2">
    <file path="log3.log"/>
    <file path="log4.log"/>
    </splitter>

    <!-- <rollingfile>滚动文件(定期清除过期日志)
    formatid: 指定日志格式; type="size" 按大小; maxsize: 单日志文件最大大小; maxrools: 最大文件数 -->
    <rollingfile formatid="someformat" type="size" filename="./log/roll.log" maxsize="100" maxrolls="5" />

    <!-- <buffered> 将日志先存在内存中,定期写入文件,适合日志并发量较大或 IO 比较紧张的场合
    size: 缓存大小; flushperiod: 缓存间隔(毫秒) -->
    <buffered formatid="testlevels" size="10000" flushperiod="1000">
    <file path="./log/bufFileFlush.log"/>
    </buffered>

    <!-- <filter>用于单独处理某级别日志
    过滤日志,把级别是error的通过邮件smtp方式发送出去(一般会发给相应的运维人员) -->
    <filter levels="error">
    <file path="./log/error.log"/>
    <smtp senderaddress="noreply-notification-service@none.org"
    sendername="Automatic notification service"
    hostname="mail.none.org"
    hostport="587"
    username="nns"
    password="123">
    <recipient address="john-smith@none.com"/>
    <recipient address="hans-meier@none.com"/>
    </smtp>
    <!-- 按tcp4网络协议发送日志 -->
    <conn net="tcp4" addr="server.address:5514" tls="true" insecureskipverify="true" />
    </filter>

    </outputs>

    <!-- <formats> 定制日志的输出格式
    https://github.com/cihub/seelog/wiki/Format-reference -->
    <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="&lt;msg&gt;%Msg&lt;/time&gt;"/>
    <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>

  • 相关阅读:
    大道至简阅读笔记01
    构建之法阅读笔记06
    第二阶段个人工作总结(10)
    学习进度条(十四周)
    第二阶段个人工作总结(9)
    SapringMVC的文件上传下载以及拦截器
    Servlet的请求
    Servlet 的生命周期
    IO流
    set接口
  • 原文地址:https://www.cnblogs.com/williamjie/p/10048159.html
Copyright © 2011-2022 走看看