V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
CzaOrz
V2EX  ›  Python

感觉 golang 的三方日志库 logrus 真的好方便啊....

  •  
  •   CzaOrz ·
    czasg · 2020-11-06 15:22:13 +08:00 · 7158 次点击
    这是一个创建于 1481 天前的主题,其中的信息可能已经有所发展或是发生改变。

    golang 代码:

    package main
    
    import "github.com/sirupsen/logrus"
    
    func main() {
    	logrus.WithFields(logrus.Fields{"name": "cc"}).Info("hello")
    }
    

    输出:

    time="2020-11-06T14:50:17+08:00" level=info msg="hello" name=cc
    

    这段日志中可以看到,拆离出了各种结构化信息,以前都没这样想过...而且输出 json 也非常方便


    然后最近又有相关需求,python 项目的日志要输出 json...我...
    不禁又羡慕起logrus来...

    需求完成后,,抽空花了两天模仿写了个loggus(半天写完,改了一天半的 bug 囧)

    import loggus
    
    if __name__ == '__main__':
        loggus.WithFields({"name": "cc"}).Info("hello")
        
        loggus.SetFormatter(loggus.JsonFormatter)
        loggus.WithFields({"age": 18}).Info("world")
    

    输出:

    time="2020-11-06 14:54:15.416516" level=info msg=hello name=cc
    {"age": 18, "time": "2020-11-06 15:05:04.613234", "level": "info", "msg": "world"}
    

    等我找个内部项目试试水先,有大佬给点意见嘛,写的太简陋了...
    https://github.com/CzaOrz/loggus

    32 条回复    2020-11-07 17:54:44 +08:00
    MadbookPro
        1
    MadbookPro  
       2020-11-06 15:30:49 +08:00   ❤️ 1
    确实方便好用,就是性能拉胯一些,最近想换了。。
    youngce
        2
    youngce  
       2020-11-06 15:35:27 +08:00   ❤️ 1
    ??? python 也有个叫做 loguru 的日志库,github7.4K 的 star,可以看看,python 一般不会出现少轮子的情况
    zzzbkl
        3
    zzzbkl  
       2020-11-06 15:37:12 +08:00 via Android   ❤️ 1
    没有原生支持日志文件 rotate,稍微有点不爽
    TypeErrorNone
        4
    TypeErrorNone  
       2020-11-06 15:38:43 +08:00   ❤️ 1
    推荐 zap
    xiaolinjia
        5
    xiaolinjia  
       2020-11-06 15:40:35 +08:00   ❤️ 2
    CzaOrz
        6
    CzaOrz  
    OP
       2020-11-06 15:43:44 +08:00
    loguru, 我 see see,好用就直接用了,哈哈
    fewok
        7
    fewok  
       2020-11-06 16:05:31 +08:00   ❤️ 4
    这怕是没用过 java 的日志库,什么 log4j 、logback 、log2j 。哪个不秒杀这些玩具
    eurry
        8
    eurry  
       2020-11-06 16:16:36 +08:00
    logrus 能打印 goroutine 的 id 吗
    xiaoqiao24
        9
    xiaoqiao24  
       2020-11-06 17:15:19 +08:00   ❤️ 1
    在不知道 loguru 之前一直用 logging 之后我就忘了什么是 logging 了
    axex
        10
    axex  
       2020-11-06 17:24:52 +08:00   ❤️ 1
    zap 玩法更多,比如直接劫持 go 的那个 std logger,或者把结构化的日志刷到 influxdb 中
    misaka19000
        11
    misaka19000  
       2020-11-06 17:25:02 +08:00   ❤️ 2
    golang 的日志也能吹一波我是没想到的。。。
    chendy
        12
    chendy  
       2020-11-06 17:29:01 +08:00   ❤️ 1
    是不是应该整个 log4go 啥的…
    ppphp
        13
    ppphp  
       2020-11-06 17:30:43 +08:00   ❤️ 1
    golang 遇到很多 interface 的时候性能就是很拉垮的
    CzaOrz
        14
    CzaOrz  
    OP
       2020-11-06 17:35:52 +08:00
    @misaka19000 这,,,只是刚好在用两种语言写项目,遇到一些问题而已,不具有其他意义==整体来说我还是喜欢 python 多些吧,,,
    CzaOrz
        15
    CzaOrz  
    OP
       2020-11-06 17:38:31 +08:00
    我 golang 接触不多,同事用的 logrus 多些,so,,,,感觉后续可以试试 zap,哈哈
    Pythondr
        16
    Pythondr  
       2020-11-06 17:54:57 +08:00   ❤️ 1
    zap 吧
    joesonw
        17
    joesonw  
       2020-11-06 17:57:55 +08:00
    @MadbookPro uber/zap 还可以
    joesonw
        18
    joesonw  
       2020-11-06 17:58:31 +08:00
    @eurry 哪个库都不行啊, goroutine 拿不到 id 的
    cz5424
        19
    cz5424  
       2020-11-06 18:56:14 +08:00 via iPhone
    Python 跟 sentry 连用,一个 error 把临时变量都会打出来
    okayan
        20
    okayan  
       2020-11-06 19:21:11 +08:00   ❤️ 1
    golang 有没有日志库可以做到类似 Java 那种,对特定的 package 指定 log level 的?

    现在引入了一些第三方库,调试时 log 开到 debug 级别,被第三方的 debug 日志刷屏了,从一大堆日志里找自己写的 debug 日志很揪心....
    ClericPy
        21
    ClericPy  
       2020-11-06 20:39:43 +08:00   ❤️ 1
    有多少人看到 loguru 主页那句 10x 性能了
    outoftimeerror
        22
    outoftimeerror  
       2020-11-06 20:44:34 +08:00
    这个项目几年前坑过我,当时 Logrus 突然换成了 logrus,害我线上 pipeline 老是失败
    hijoker
        23
    hijoker  
       2020-11-06 21:03:15 +08:00
    go 的日志库是几个语言里最挫的,没有之一
    xfs
        24
    xfs  
       2020-11-06 21:23:14 +08:00
    第一眼看到“golang”、“日志库”这种关键字第一反应是又有人吐槽了,结果仔细一看居然是夸的,哈哈哈哈
    Moker
        25
    Moker  
       2020-11-06 21:26:14 +08:00
    目前用的是 zerolog
    qxooqx
        26
    qxooqx  
       2020-11-06 22:01:25 +08:00 via Android
    当前用 zap,日志多的时候怀疑人生,求推荐一个能安模块分类的方法
    laminux29
        27
    laminux29  
       2020-11-06 22:28:09 +08:00
    世间任何事物都有两面性,方便的代价从来都是可定制性的降低,低可定制线意味着性能的不可控甚至降低。---鲁迅。
    aliipay
        28
    aliipay  
       2020-11-06 22:36:15 +08:00
    lrh3321
        29
    lrh3321  
       2020-11-07 07:13:22 +08:00 via Android
    就没其他和我一样用 klog 的吗
    troywinter
        30
    troywinter  
       2020-11-07 12:39:40 +08:00
    结构化日志,一直用 zap
    qloog
        31
    qloog  
       2020-11-07 15:01:14 +08:00
    一直在用 zap: https://github.com/1024casts/snake/tree/master/pkg/log 比较方便自定义,扩展性比较强。当然性能方面更优秀。
    ppphp
        32
    ppphp  
       2020-11-07 17:54:44 +08:00
    @lrh3321 prometheus 就是用的 klog 。。。反正主要看日志需不需要性能吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3256 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:04 · PVG 21:04 · LAX 05:04 · JFK 08:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.