【问题标题】:How to use log4go with configuration file?如何将 log4go 与配置文件一起使用?
【发布时间】:2019-02-25 10:43:14
【问题描述】:

我一直在尝试在 golang 中使用 log4go。但是我找不到一个合适的例子,其中使用 log4go 配置属性(如旋转、maxSize 等)来创建记录器。有人可以提供一个例子吗?我参考了很多网站。

【问题讨论】:

标签: go logging


【解决方案1】:

log4go 没有很好的文档记录,我在original repository 找到了一些文档。
如果可以的话,我会使用不同的库,例如 logrus,它有更好的文档、示例并且正在积极开发中。

【讨论】:

  • Logrus 不支持写入两个不同的日志文件,对吧?即使我在使用 Logrus,我也搬到了 log4go,因为需要在两个不同的文件中写入日志
  • 你看lfshook了吗?它应该可以解决您的问题
  • Ifshook 根据日志级别写入不同的文件。我对么?我需要根据某些字节解码来记录。我可以以某种方式指定它而不是日志级别吗?
【解决方案2】:

简单的方法是使用logConfig xml,例如:

<code>
    <logging>
    <filter enabled="true">
      <tag>stdout</tag>
      <type>console</type>
      <!-- level is (:?FINEST|FINE|DEBUG|TRACE|INFO|WARNING|ERROR) -->
      <level>INFO</level>
      </filter>
      <filter enabled="true">
            <tag>file</tag>
            <type>file</type>
            <level>INFO</level>
            <property name="filename"><log file Path></property>

            <!--
              %T - Time (15:04:05 MST)
              %t - Time (15:04)
              %D - Date (2006/01/02)
              %d - Date (01/02/06)
              %L - Level (FNST, FINE, DEBG, TRAC, WARN, EROR, CRIT)
              %S - Source
              %M - Message
              It ignores unknown format strings (and removes them)
              Recommended: "[%D %T] [%L] (%S) %M"
            -->
            <property name="format">[%D %T] [%L] (%S) %M</property>
            <property name="rotate">true</property> <!-- true enables log rotation, otherwise append -->
            <property name="maxsize">10M</property> <!-- \d+[KMG]? Suffixes are in terms of 2**10 -->
            <property name="maxlines">0K</property> <!-- \d+[KMG]? Suffixes are in terms of thousands -->
            <property name="daily">true</property> <!-- Automatically rotates when a log message is written after midnight -->
            <property name="maxbackup">10</property> <!-- Max backup for logs rotation -->
      </filter>
    </logging>

就个人而言,我更喜欢 zarolog :https://github.com/rs/zerolog

【讨论】:

    【解决方案3】:

    这是一个可以有两个日志的示例:

    {
      "console": {
        "enable": true,
        "level": "ERROR"
      },
      "files": [{
        "enable": true,
        "level": "DEBUG",
        "filename":"./log/sys.log",
        "category": "syslog",
        "pattern": "[%D %T] [%L] (%S) %M",
        "rotate": true,
        "maxsize": "5M",
        "maxlines": "10K",
        "daily": true
      },
        {
          "enable": true,
          "level": "INFO",
          "filename":"./log/market.log",
          "category": "marketlog",
          "pattern": "[%D %T] [%L] (%S) %M",
          "rotate": false,
          "maxsize": "10M",
          "maxlines": "20K",
          "daily": false
        }
      ]
    }
    

    代码中的用法:

    log4go.LOGGER("syslog").Info("...")
    log4go.LOGGER("marketlog").Debug("...")
    

    在这种情况下不会编写关于 marketlog 的调试调用,因为“INFO”级别会自动将其过滤掉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 2014-09-08
      • 2019-01-11
      • 2015-12-10
      • 2019-06-08
      • 1970-01-01
      相关资源
      最近更新 更多