asl logger在程序运行时(或任何其他配置)更改过滤器设置

时间:2015-09-06 07:41:32

标签: c++ c macos logging

我想从外部实用程序更改ASL记录器过滤器设置。

但是,我希望尽可能少地降低性能。

目前我通过创建一个特殊文件来保存记录器级别参数, 并通过以下命令更改它

echo LOGGER_LEVEL > /etc/syslog_MODULE.conf

在使用记录器的应用程序中,有一个特殊的线程将文件映射到虚拟内存空间,并检查每个间隔是否应提交新的记录器级别。

这是映射部分:

const char * mmap_config()
{
    int fd;
    char *data;
    struct stat sbuf;

    if ((fd = open("/tmp/conf", O_RDONLY)) == -1) {
        perror("open");
        exit(1);
    }

    if (stat("/tmp/conf", &sbuf) == -1) {
        perror("stat");
        exit(1);
    }

    data = (char *)mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
    if (data == (caddr_t)(-1)) {
        perror("mmap");
        exit(1);
    }

    return data;
}

这是寻找记录器级别变化的循环:

int main() {
    const char* x = mmap_config();
    while (1) {
        int y = atoi(x);
        asl_set_filter(log_asl_client, ASL_FILTER_MASK_UPTO(y));
        sleep(5);
    }
}

或许有更简单的方法可以通过更小的性能足迹来实现这一目标?

谢谢

0 个答案:

没有答案