• syslog Linux系统log打印原理


    常见打印log代码

    void d_logs(int level, const char *fmt, ...)
    {
        va_list  va;
        char buff[LOG_LEN] = {0};

        if (g_log_level < level) {
            printf("error: log level error [%d:%d]\n ", g_log_level,  level);
            return;
        }

        snprintf(buff, LOG_LEN, "test: %s\n", fmt);

        va_start(va, fmt);
        if (syslog_mode == 1) {
            vsyslog(level, buff, ap);    -----》 使用系统log, 
        } else {
            vfprintf(stderr, buff, ap);  ----》输出到stderr
        }
        va_end(va);
        return;
    }
     

    int main(void)

    {

    /*打开日志*/

    openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);

    d_log(LOG_INFO,  "PID information, pid=%d", getpid());

    d_log(LOG_DEBUG, "debug message ");

    d_log(LOG_ERR, "err message ");

    /*关闭日志*/

    closelog();

    }

    大家经常打印系统log,常见的打印log有两种方式,一种是靠syslog输出,另一种输出到stderr。

    syslog打印是有等级

      LOG_EMERG = 0
    LOG_ALERT = 1
    LOG_CRIT = 2
    LOG_ERR = 3
    LOG_WARNING = 4
    LOG_NOTICE = 5
    LOG_INFO = 6
    LOG_DEBUG = 7

    LOG_EMERGSystem ist unbrauchbar.
    LOG_ALERTAktion ist sofort erforderlich.
    LOG_CRITKritischer Zustand.
    LOG_ERRFehler aufgetreten.
    LOG_WARNINGWarnung aufgetreten.
    LOG_NOTICENormale, aber wichtige Meldung.
    LOG_INFOInformative Meldung.
    LOG_DEBUGDebug-Level-Meldung

    系统syslog 是受syslogd进程控制,通常打印在messages中。具体打印log的等级syslogd进程的配置文件设置。

    另一种输出到stderr,这种输出直接由相应进程执行d_log函数,然后输出到标准的错误中。其实就是把程序直接在后台执行,然后log会打印在/dev/console里。

    但是这种方式存在风险,因为stderr可能被重定向到其他地方。

  • 相关阅读:
    Win10+MX350+CUDA10.2+Python3.9配置Detectron2
    2022家用投影仪首选!当贝F5强悍音画效果带来极致视听体验
    面试官随便问几个问题就知道你究竟做没做过微信支付宝支付
    Python lambda 函数深度总结
    mojo 笔记 (Python/Cython)
    java学习任务书(14)
    前端面试题之——兼容篇
    vscode中 vue3+ts 项目的提示失效,volar插件失效问题解决方案
    Node.js事件循环
    docker-compose实现容器任务编排
  • 原文地址:https://blog.csdn.net/mudawei1/article/details/126154378