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

<think>我们正在回答用户关于Linux查看系统日志的问题。根据引用内容,我们可以总结出常用的命令和方法。注意:引用内容中提到了tail、cat、tac、head、echo、grep、less、awk、sed等命令,但用户主要关注查看或打印系统日志的方法。我们将重点介绍几个最常用的命令,并给出具体用法示例。另外,用户要求“打印或查看日志信息”,因此我们不仅要介绍查看方法,也要提及如何打印(通常指输出到终端或重定向到文件)。结构:1.介绍日志文件的位置(常见日志文件路径)2.详细说明每个常用命令的用法(包括查看和打印日志的示例)3.提供一些组合使用的技巧注意:引用[1]和引用[2]提供了部分命令的说明,我们将在此基础上扩展,并确保正确性。常见日志文件位置:-/var/log/messages:常规系统日志-/var/log/syslog:系统日志(Ubuntu等) -/var/log/auth.log:认证日志- /var/log/kern.log:内核日志- /var/log/dmesg:内核环形缓冲区日志(也可用dmesg命令查看)常用命令:1.tail:查看文件尾部,常用于实时监控日志2. cat:查看整个文件内容(适合小文件)3. less:分页查看,适合大文件4.grep:过滤日志内容5.head:查看文件头部6.tac:倒序显示(从最后一行到第一行)7.awk/sed:文本处理,用于格式化或提取特定内容我们将逐一介绍这些命令在查看日志时的用法。注意:用户可能需要知道如何实时查看日志(跟随新内容)以及如何搜索日志。</think>### Linux 查看系统日志方法总结 在 Linux 系统中查看日志系统管理的基础操作,以下是常用命令和方法: #### 1. **实时追踪最新日志** ```bash tail -f /var/log/syslog ``` - `-f` 参数实时刷新日志(按 `Ctrl+C` 退出) - 查看最后 N 行:`tail -n 20 /var/log/syslog`[^2] #### 2. **查看完整日志文件** ```bash cat /var/log/kern.log ``` - 适合小文件(大文件可能刷屏) - 倒序显示:`tac /var/log/auth.log`(从末尾向开头显示) #### 3. **分页浏览大日志** ```bash less /var/log/syslog ``` - 支持上下翻页(`↑/↓` 方向键) - 搜索:输入 `/关键词`(按 `n` 跳转下一个) - 退出按 `q` #### 4. **过滤关键信息** ```bash grep "error" /var/log/syslog ``` - 组合使用:`grep -i "failed" /var/log/auth.log | less` - 正则搜索:`grep -E "192\.168\.1\.[0-9]+" /var/log/apache2/access.log` #### 5. **查看日志头部** ```bash head -n 50 /var/log/boot.log ``` - 显示日志文件前 50 行 #### 6. **特定时间范围日志** ```bash sed -n '/2023-10-01 08:00:/,/2023-10-01 09:00:/p' /var/log/syslog ``` - 提取 8:00 到 9:00 的日志 #### 7. **系统日志管理工具** ```bash journalctl -xe # 查看 systemd 日志 dmesg | less # 查看内核日志 ``` #### ⚠️ 注意事项: 1. 需要 root 权限查看部分日志:`sudo less /var/log/secure` 2. 日志路径常见位置: - 系统日志:`/var/log/syslog` - 认证日志:`/var/log/auth.log` - 内核日志:`/var/log/kern.log` - 应用日志:`/var/log/apache2/` 等应用专属目录 3. 打印日志到文件:`grep "error" /var/log/syslog > errors.txt` --- ### 相关问题 1. 如何实时监控多个日志文件的变化? 2. Linux 日志轮转(logrotate)的工作原理是什么? 3. 怎样通过日志诊断 SSH 登录失败问题? 4. 如何配置 Rsyslog 实现远程日志收集? [^1]: Linux 日志查看命令总结 [^2]: tail 命令常用参数示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值