日志系统

更新时间:
2024-01-09
下载文档

日志系统

为了能够实时记录系统发生的各种事件,SylixOS 加入了日志管理功能,用户通过分析日志文件可以及时发现和处理系统运行过程中的问题。

在实际的应用中日志根据具体情况分为不同的等级,SylixOS 日志等级与 Linux 日志等级兼容,SylixOS 提供以下宏来表示不同的日志等级:

  • KERN_EMERG :会导致主机系统不可用的情况。
  • KERN_ALERT :必须马上采取措施解决的问题。
  • KERN_CRIT :比较严重的情况。
  • KERN_ERR :运行出现错误。
  • KERN_WARNING :可能会影响系统功能的事件。
  • KERN_NOTICE :不会影响系统但值得注意。
  • KERN_INFO :一般信息。
  • KERN_DEBUG :程序或系统调试信息等。

日志等级从上到下依次变低,通常对于系统来说,如果发现等级 KERN_EMERG 的日志,则代表发生了严重的问题导致系统不可以再运行。等级 KERN_DEBUG 通常被用于一些调试信息的打印,在 SylixOS 驱动的开发中,经常使用等级 KERN_ERR 来打印一些错误信息,使用等级 KERN_INFO 来打印一些普通信息。

调用下面函数可以打印日志信息。

#include <SylixOS.h>
INT    logPrintk(CPCHAR    pcFormat, ...);

函数 logPrintk 原型分析:

  • 此函数成功返回打印长度,失败返回-1 并设置错误号。
  • 参数 pcFormat 是日志打印格式字符串。
  • 参数 ... 是可变参数,可以传递更多的参数。

此函数通常用于驱动开发中的日志打印,功能等价于 printk 函数,因此为了提高程序的兼容性通常使用 printk 函数来代替 logPrintk 函数。

注意
实际上 SylixOS 中 printk 是对 logPrintk 函数的宏定义。

调用 logPrintk 函数会将日志信息打印到终端中,这在只有少量日志信息的情况下无疑是一种有效的查看方法,但是当日志信息大量增加时,这种方法将是低效的甚至是不可取的。为了解决这种效率问题通常需要将日志信息打印到一个指定文件中,以方便后续的分析。

下面函数用来设置日志文件的文件描述符。

#include <SylixOS.h>
INT    logFdSet(INT   iWidth, fd_set  *pfdsetLog);
INT    logFdGet(INT  *piWidth, fd_set  *pfdsetLog);

函数 logFdSet 原型分析:

  • 此函数成功返回 0,失败返回-1 并设置错误号。
  • 参数 iWidth 是文件描述符宽度。
  • 参数 pfdsetLog 是关心的文件描述符集。

logFdSet 函数将新的文件描述符集设置为日志系统的文件描述符集,logFdGet 函数可以获得日志系统先前的文件描述符信息。需要注意的是,为了不破坏日志系统当前的文件描述符集,通常需要按下面的方式使用这两个函数:

logFdGet(&iWidth, &fdset);
FD_SET(iNewFd, &fdset);
logFdSet(iNewWidth, &fdset);

当设置完文件描述符后,就可以调用下面的函数进行日志的打印。

INT    logMsg(CPCHAR       pcFormat,    PVOID        pvArg0,
                PVOID        pvArg1,    PVOID        pvArg2,
                PVOID        pvArg3,     PVOID        pvArg4,
                PVOID        pvArg5,     PVOID        pvArg6,
                PVOID        pvArg7,     PVOID        pvArg8,
                PVOID        pvArg9,     BOOL         bIsNeedHeader);

函数 logMsg 原型分析:

  • 此函数成功返回 0,失败返回-1 并设置错误号。
  • 参数 pcFormat 是字符打印格式。
  • 参数 pvArg0~pvArg9 是打印参数。
  • 参数 bIsNeedHeader 表示是否打印日志头信息。

尽管 SylixOS 向应用层提供了这些打印日志函数,但通常被用于内核空间(如驱动程序开发的 printk 函数),实际上,在应用层 POSIX 已经提供了打印日志的方法,SylixOS 对 POSIX 日志系统提供了支持。

文档内容是否对您有所帮助?
有帮助
没帮助