zlog 2.0 开发中

难易 发布于 2013/07/25 22:28
阅读 611
收藏 0
zlog2.0的目标是:
1.节省内存
2.节省CPU
3.增强性能


这3者是可能实现的吗?我想是的,软件开发,永远都会又更加优雅合适的解决方法,随着时间不断涌现出来。


当然,为了达到这3个目标,zlog的API语义也要有一定的变化
1. zlog_category_t ,分类,不再是跨线程可用的,多线程下的代码会是这样
// in thread a
        static zlog_category_t *a_cat;
    
        {
        a_cat = zlog_get_category("my_cat");
        zlog_info(a_cat, "blablaa...");
        }
    
        // in thread b
        static zlog_category_t *b_cat;
    
        {
        b_cat = zlog_get_category("my_cat");
        zlog_info(b_cat, "blablaa...");
        }



2.增加了一个“深度”的配置文件项,更透明的由用户来控制缓存、速度和安全性的平衡。配置文件就像这样:


[global]
      strict init = true
      rotate lock file = self
      auto reload = 3600 # reload configure file once every 3600 second # file mtime


    [deepness]
    # sign = permisson, buffer size, flush size, flush count, fsync count
      + = 600, 10KB, 8KB, 20, 1000
      - = 600, 10KB, 1KB, 1, 20
     ++= 777, 10KB, 8KB, 100, 0
      
    [levels]
      TRACE = 10
      CRIT = 130, LOG_CRIT
      
    [formats]
      * = "%d %V [%p:%F:%L] %m%n"
      simple = "%m%n"
      normal = "%d(%F %T.%l) %m%n"
      
    [rules]
      *.*                             +"%12.2E(HOME)/log/%c.log"; simple
      my_cat.!ERROR     -"aa.log"
      my_.info                     >stderr;
      my_dog.=DEBUG     >syslog, LOG_LOCAL0; simple


[deepness]决定了zlog给每个文件开多大的用户态缓存、缓存到多少write出去、多久fsync一次,然后以加减号的形式写在规则前面。


3. 考虑自动重载配置文件这个特性该怎么设计,原先在zlog1.2中开一个计数器,然后每次写日志+1。现在在zlog 2.0中,自动重载打算由时间来触发。问题是,每次写日志的时候,只有在rule或者format里面碰到需要输出时间的时候,才会调用gettimeofday()。如果没有任何一个rule或者format需要时间,那zlog就不会知道现在是什么时候,也没办法去做自动重载。

所以,还是性能和功能的平衡点的权衡问题。
我是否应该抛弃自动重载配置文件这个特性呢?
或者在每次写日志函数被调用时,都去跑一次gettimeofday(),无论后面是否需要。然后用这个时间来做自动重载呢?

希望大家能给我一些反馈,任何想法,或者其他希望在zlog 2.0中实现的特性或改变都行。




加载中
0
江南浪子
是不是可以在  fsync 时候根据配置文件是否已修改,进行自动重载配置文件?
0
难易
难易

引用来自“江南浪子”的答案

是不是可以在  fsync 时候根据配置文件是否已修改,进行自动重载配置文件?

1.fsync不是定时的

2.怎么判断配置文件是否被修改?mtime?如果配置文件被touch后,mtime修改了,但实际无需重载。

江南浪子
有可能加上文件大小吗?其他验证(比如Md5)可能会影响性能
返回顶部
顶部