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>

  • 相关阅读:
    SharePoint 2013 图文开发系列之自定义字段
    SharePoint 2013 图文开发系列之Visual Studio 创建母版页
    SharePoint 2013 图文开发系列之代码定义列表
    SharePoint 2013 图文开发系列之计时器任务
    SharePoint 2013 图文开发系列之应用程序页
    SharePoint 2013 图文开发系列之事件接收器
    SharePoint 2013 图文开发系列之可视化WebPart
    SharePoint 2013 图文开发系列之WebPart
    SharePoint 2013 对二进制大型对象(BLOB)进行爬网
    SharePoint 2013 状态机工作流之日常报销示例
  • 原文地址:https://www.cnblogs.com/williamjie/p/10048159.html
Copyright © 2011-2022 走看看