📜  journalctl 未显示所有日志 - 汇编(1)

📅  最后修改于: 2023-12-03 15:02:08.945000             🧑  作者: Mango

Journalctl 未显示所有日志 - 汇编

在使用journalctl命令查看系统日志时,可能会遇到该命令未能显示所有日志的情况。本篇文章将针对在汇编程序中使用syscall调用系统日志时出现的问题,介绍如何解决journalctl未显示所有日志的问题。

问题描述

在汇编程序中使用syscall调用syslog系统函数,运行结束后使用journalctl命令查看系统日志,发现日志未完全显示。

解决方案
增加日志存储级别

syslog系统函数中指定日志存储级别。

代码示例:

section .data
  SYSLOG_KERN equ 0
  SYSLOG_INFO equ 6
  SYSLOG_DEBUG equ 7

section .text
  global _start

_start:
  ; 将字符串存储到缓冲区中
  mov rax, 4            ; 系统调用
  mov rbx, 1            ; stdout文件描述符
  mov rcx, message      ; 字符串地址
  mov rdx, message_len  ; 字符串长度
  int 0x80

  ; 调用syslog函数记录日志
  mov rax, 103          ; syslog系统函数调用号
  mov rdi, SYSLOG_KERN  ; 日志存储级别
  mov rsi, message      ; 日志消息
  xor rdx, rdx          ; 自动计算日志消息长度
  syscall

  ; 将程序退出码存储到eax
  mov eax, 0
  ret

section .data
  message     db 'Hello, world!', 0x0a  ; 日志消息
  message_len equ $ - message           ; 日志消息长度

上述代码中使用mov rdi, SYSLOG_KERN指定了日志存储级别为内核级别,这可以保证日志存储于内核环境中,而不是用户环境中。

增加日志缓冲区大小

/etc/systemd/journald.conf中修改日志缓冲区大小。

代码示例:/etc/systemd/journald.conf

[Journal]
# 指定日志缓冲区大小
SystemMaxUse=10M

此处将日志缓冲区大小指定为10M,可以允许更多的日志消息存储在日志缓冲区中。

增加日志突发上限

/etc/systemd/journald.conf中修改日志突发上限。

代码示例:/etc/systemd/journald.conf

[Journal]
# 指定日志突发上限
SystemMaxMessages=100

此处将日志突发上限指定为100,可以允许更多的日志消息被保存。

启用持久化日志存储

/etc/systemd/journald.conf中启用持久化日志存储。

代码示例:/etc/systemd/journald.conf

[Journal]
# 启用持久化日志存储
Storage=persistent

此处启用了持久化日志存储,可以允许更多的日志消息被保存。持久化日志存储也将允许从上次启动后的日志消息中恢复,以便进一步分析。

结论

通过以上几种方法,可以解决journalctl未显示所有日志的问题。具体的解决方案根据具体情况而异,可以根据需要进行选择。