• 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可能被重定向到其他地方。

  • 相关阅读:
    Kerberos认证协议介绍
    springboot 通过url下载文件并上传到OSS
    Spring Boot中整合WebSocket
    日常开发方案设计指北
    软件工程-大学体育馆管理系统用例图
    FileZilla创建FTP服务器-版本1.2
    Error: [mobx-miniprogram] no store specified (小程序全局数据共享bug)
    PTA程序辅助实验平台——2023年软件设计综合实践_3(分支与循环)
    111.Parquet表的使用
    Linux下 Apache 配置 SSL 支持 https
  • 原文地址:https://blog.csdn.net/mudawei1/article/details/126154378