syslog Linux系统log打印原理

本文介绍了两种常见的日志打印方式——syslog和stderr,详细讲解了syslog的不同等级及其含义,并通过代码示例展示了如何在C程序中使用这两种方式记录日志。syslog等级包括LOG_EMERG到LOG_DEBUG,适用于不同严重程度的消息。而stderr则直接将日志输出到标准错误,可能存在日志重定向的风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值