-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
拜读了一下XLOG #9
Comments
其实 xlog最开始最是从2012年开始的,链接的文章里也说了这个中间演变过程。最后一版是2015年完成的。你看到的2016年的日期应该是 log_crypt 中的日期,这个确实是2016年写的,是为了开源出去稍微重构了一下,新建了这个文件。 业界确实已经有很多优秀的日志组件了,比如 Log4j、LOGBack、Log4CPP等等。 只是这些日志组件大部分都是给服务端做的,有太多冗余的功能是客户端不需要的,功能和性能也都不太能满足客户端的要求。 微信的 xlog 也正是在自身开发过程中应运而生的,这里确实也借鉴了 sqlite 里用mmap 提高性能防止丢数据这个思想。 对于移动开发,其实日志是躲避不了和 crash 联系到一起,用户的手机远比我们想象中的复杂,应用经常被操作系统杀掉(kill 9), 目前 crash 捕捉工具捕捉不到。 而且还有各种闪退,这些都在 PC 时代很少遇到的。基本 crash 工具是很难保证肯定能把日志写下去的。 用了什么库和性能是没有直接关系的,除非这个库非常性能非常差。任何库说白了也是代码和我们写的代码都没区别,正是为了不重复造轮子才引入了 boost,而且主要用了 filesystem, function, shared_ptr, signals2 这些工具类。编译也都是编译的动态库,也不会对安装包的体积产生很大的影响。 感谢对mars的关注,如果发现更多问题,欢迎随时提issue/pr,我们希望能够和社区开发者共同成长。 |
2016年才写的代码和经过微信亿万用户验证冲突吗?这都算吹牛? |
只能说:官方人员的态度真好。 也不至于捧谁。 对比起同样是腾讯搞出来的msec, 一楼拿XX文件是2016年创建的说事……就太那个了,让人感觉是为了黑而黑。 想一下就知道两点原因:
某某项目引用boost,是经常被人诟病的事情,但是直接的说,boost库的性能、稳定性比同类的开源软件只好不差,唯一的缺点,就是体积会变大。 |
开源就是给大家一种选择,你可以用Log4cpp、Log4j,也可以用xlog,多一种选择没什么不好。
函数式的概念1958就提出了,到今天依然很fancy。
我个人理解log和crash都是我们查问题的一个渠道,我个人是专精Android的,Android中如果有native crash,在app级别是很难有机会去拿到和写当时的crash上下文的。
理想是好的,现实总是残酷的,总是有各种各样的坑在等着我们。
用什么库我个人觉得只是最早的开发者选型的问题,每个人都有自己的技术栈和使用偏好。如果有性能和程序大小都更优,更适合移动端的库,大家可以在社区开branch去替换掉它。 开源了就是给大家一个交流的途径,总比各自闭门造车的好。因为微信里面确实是在用这些库,微信的日活大家也看到了,“微信亿万用户验证”并没有吹什么牛呀。。。 |
既然是精简版boost 为什么不直接c++11?boost库导致库变大多少?crash工具我所知道ios的几个工具都可以抓到,与日志没关系,可以反向映射到c++。你们日志性能跟log4cpp比较过吗,性能数据看看? |
开源喷子多,赞官方态度。 |
不用 C++11这个就牵涉到跨平台的原因了。iOS 很早就可以使用 C++11,但是 Android ndk 迟迟没有提供 C++11的标准库,直到今年上半年才给了一个,谷歌一给出,我们就尝试使用了,但是提供的库有 Bug,所以做了回退。所以目前 Mars 是使用 C++11编译,用了 C++11的语法糖,没有使用 C++11的标准库。前面提到的Android 平台下那个库的 Bug 我们一直在关注,看到已经解决了,后面应该会再次尝试切到 C++11,但是需要时间来验证稳定性。 iOS 相对来说没有 Android 的生态恶劣,但是iOS 下也存在有些 Crash工具是捕捉不到的,甚至 Crash 捕捉工具也会 Crash,微信收到闪退但是 Crash 捕捉模块捕捉不到 Crash 的案例数不胜数。这种情况 Android 系统下会更严重。 目前没有直接和 Log4CPP 对比过性能,如果不考虑完整性的话,只考虑耗时文章中有一组数据你可以参考:单行日志的平均耗时。 和Log4CPP 的对比我们后续也会做一下给出数据。 |
赞官方态度。都是技术人员,有问题心平气和的提出来就好。 |
这样的项目出来,对于业界来说无疑是百利而无一害. |
经得住多大的荣耀就要经得住多大的诋毁. |
我是个菜鸟,但是楼主的问题和官方的解答,也让我加深了对xlog的理解。也会去注意这方面的东西。谢谢楼主和官方!! ————还是不要在issues上说些顶撞人的话,我比较乐意看到技术上的交锋!! |
在这里我说两句吧,大家也不要去做个人攻击。 关于我们的问题,无论好的还是坏的,我们都会虚心改进,这也是我们开源的目的。我们希望微信可以跟社区共同进步,大家都可以影响到自己日常使用过程中的微信。 |
喷跟讲理有时只是一念之差 |
你们这是逼大家mute thread吗?在issues里玩这个真无聊。 |
确实 做技术先做人,没人欠你什么,开源已经是为技术做贡献了,好与不好,都是交流,拒绝无脑喷 |
说no, 并不是否定,而是获取更多信息的方式。
这位仁兄是不是自我感觉站在一个道德高地嗨起来了?
发自我的 iPhone
… 在 2016年12月30日,16:54,xuyisheng ***@***.***> 写道:
确实 做技术先做人,没人欠你什么,开源已经是为技术做贡献了,好与不好,都是交流,拒绝无脑喷
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.
|
宝宝,你是想蹭热点吗?我也来蹭一个【害羞】 |
之前承诺的 benchmark 另外,我 reopen 的目的是希望大家关注到 这个benchmark, 此 issue 禁止人身攻击。 |
谢谢。。性能看起来数据不错 文中提到了xlog是宏,log4cpp是函数,所以比较慢 另你提到是带压缩的,是不是开发人员拿到的日志默认是压缩的,是zip的吗? 编了一下BOOST版本的总共库31M per arch |
log4cpp 比 xlog 慢并不是因为 xlog 使用了宏。 是因为 log4cpp 同步写了磁盘,xlog没怎么做。具体细节可以谷歌存储方面的原理分析。 Xlog.appenderOpen(Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, "", logPath,"MarsSample"); 这个只是程序启动时打开xlog的函数。 其他调用接口打日志的时候通过 xverbose xinfo xdebug xwarn xerror xfatal 。当然这只是C++的接口,Objc 可以直接调用,注意传 C/C++ 的数据类型就行了。如果想直接传NSString这种,需要封装一下,demo 里有封装好的接口可以直接用或者自己封装都可以。 Android使用因为是通过JNI 调用到 C,也需要封装, demo里也有相关封装好的接口。 默认拿到的是压缩的,我们有解压的脚本也提供了,是使用的流式压缩,可以认为是zip的一种,后续可能会考虑使用 zstd替换掉,压缩率更高性能也会更高。 目前没有计划去除 boost,除非全部升到 C++11, 因为boost的跨平台封装和一些库,语法糖的封装是别的库不能比的。 全部编确实会很大,但是我们不会全部用,只使用了部分,所以并不会增大库多少。如果必要,我们尽可能不会使用boost里的功能。举个例子:一直想使用正则表达式的一些库,有其他的scanf可以替代,都没引入。 Xlog 不能和 comm 组件解耦,这里涉及到后面会尝试把STN和Xlog解耦,但是接口就需要放在comm里,实现是Xlog。 而且Xlog总需要一些基础库。 无论解耦不解耦对使用者是不可见的。 |
官方的态度真好,👍 |
“mmap提高性能防止丢失数据”,其实说白了就是mmap做的一个buffer,优势就是不会丢数据,性能应该还不如普通内存buffer |
确实如此,毕竟还要将数据同步到文件中,不可能比 内存还快。 |
http://mp.weixin.qq.com/s/cnhuEodJGIbdodh0IxNeXQ
C++里已经有log4cpp了,你们说的,他们都做到了,而且02年就做好了
buffer的概念很多年前就有了
还有crash是crash,与日志有何关系?抓crash是另外的topic, log啥也不需要做什么,正常open, write, close即可。crash工具该保证日志写下去,而不是日志能crash写进去。。。
感觉因果关系倒置了
丢日志。。。就更是耸人听闻。。。那还叫日志工具吗。。。
另外还用了BOOST库,唉呀妈呀,口口声声强调为了mobile,为了性能,这就把boost库引入到手机上了?
The text was updated successfully, but these errors were encountered: