【问题标题】:Logging frameworks for embedded linux?嵌入式 linux 的日志框架?
【发布时间】:2010-09-25 05:25:54
【问题描述】:

我需要一个小型、可移植的框架来登录嵌入式 linux。理想情况下,它将输出到文件或套接字,并且具有某种日志旋转/压缩也很好。

到目前为止,我已经找到了很多框架,但几乎所有的框架都有令人生畏的构建过程或需要使用应用程序框架(例如 log4cxx 需要 Apache Portable Runtime,我宁愿不打扰.. .).

只是在寻找简单而强大的东西,但我似乎找到的一切都很复杂,或者需要大量的二级垃圾才能运行。

建议? (如果答案是我自己的,那很好,但是......最好避免这种情况)

【问题讨论】:

    标签: linux logging embedded


    【解决方案1】:

    使用syslog(3) 和来自BusyBox 的syslogd。 BusyBox 精简后可以非常紧凑,并且不依赖于 libc 以外的任何东西。您可以删除不需要的所有内容,因此完全可以仅将其用于日志记录。

    我们在许多嵌入式系统上使用 BusyBox,包括 Linux 和 uClinux,并且发现它的日志记录工具非常可靠。

    【讨论】:

      【解决方案2】:

      我没有使用 log4cxx 模块的经验,但我在运行 Linux 的嵌入式目标上使用 APR(它基于 Atmel AT91SAM926x 处理器系列)。配置和编译非常简单(或多或少 ./configure --host=arm-none-linux-gnueabi),所以我不会害怕走 log4cxx 路径。

      【讨论】:

        【解决方案3】:

        也许您应该考虑花一些时间在一个好的日志框架上,因为这是您将在嵌入式 Linux 上使用的。 ... 和 printf ...

        我做了一些东西,我可以在运行时启用/禁用每个模块的各种日志记录级别。

        您是否尝试过在 Linux 上调试多线程应用程序?

        祝你好运!

        【讨论】:

        • 我同意。在过去的一个项目中,我们开发了与日志运行时控制类似的东西。这效果很好!太糟糕了,我们无法开源代码。
        【解决方案4】:

        在 C 中实现非常健壮的日志记录机制需要大约 1000 行代码(来自我们的代码库)。其中 90% 定义了不同的部分。这包括不同的宏DBG_E DBG_W DBG_TRACE 等...并拆分为部分,调试级别和调试模块的运行时更改(不包括压缩,只是简单的打印抽象,可以以不同的方式实现文件/套接字/串行等。 .) .
        我估计实施起来需要几天时间。不利的一面是您将花几天时间获得满足您的需求的东西,仅此而已,我知道您正在使用嵌入式平台,占用空间和内存使用很重要,最佳和优化的解决方案将是您编写的解决方案。我们投资了那几天。并在不同的产品/项目中使用它,并根据过去的时间根据实际需要进行调整/改进。通用解决方案的主要问题,它通常会做一些你需要的事情以及更多,这更多通常只是资源的腰部。

        【讨论】:

          【解决方案5】:

          我无法想象您的平台太小而无法包含 log4cxx 和 APR,大型库也不是,即使是最小的平台也可能有空间容纳它们。

          您可以只使用 C 库提供的 syslog——busybox 提供了一个 syslog 守护程序(毫无疑问,如果您在一个非常小的平台上,您已经在使用它)。我不知道busybox 的syslogd 是否可以登录网络,但它具有一定程度的灵活性。您可以非常简单地使用 shell 脚本进行日志轮换。

          【讨论】:

            【解决方案6】:

            使用 klogd 它读取内核日志消息(来自 /proc/kmsg 内核)接口并将这些消息重定向到适当的目录。您可以使用用户可配置的 syslogd 守护程序和 klogd,它将内核消息重定向到 /var/log/ 目录中的适当文件。 比如邮件服务相关的日志会保存在/var/log/main.log,内核启动过程相关的日志会保存在/var/log/boot.log强>。用户可以使用 syslogd 配置文件配置日志解析。

            但是使用 syslogd 可能会导致系统性能下降,因为对于每条日志消息,syslog 守护程序都会执行磁盘操作以将该日志存储到适当的文件中

            日志序列

            来自内核的消息 ---> klogd(从内核环形缓冲区访问消息)-->syslogd --> /var/log/*

            【讨论】:

              猜你喜欢
              • 2022-07-28
              • 1970-01-01
              • 1970-01-01
              • 2015-08-26
              • 1970-01-01
              • 2018-06-27
              • 2021-11-29
              • 2021-01-18
              • 1970-01-01
              相关资源
              最近更新 更多