44

在 Linux 中,我知道如何/var/log/messages在我创建的一个简单的 shell 脚本中向文件写入一条简单的消息:

#!/bin/bash
logger "have fun!"

我想停止将消息扔到默认/var/log/messages文件中,并创建我自己的。

我试过这个:

#!/bin/bash
logger "have more fun" > /var/log/mycustomlog

它仍然记录到/var/log/messages. 它确实创建了/var/log/mycustomlog,但它是空的。

有人看到我错过了什么吗?

4

5 回答 5

42

logger记录到 syslog 设施。如果您希望消息转到特定文件,则必须相应地修改 syslog 配置。你可以像这样添加一行:

local7.*   -/var/log/mycustomlog

并重新启动系统日志。然后你可以像这样记录:

logger -p local7.info "information message"
logger -p local7.err "error message"

并且消息将以正确的日志级别出现在所需的日志文件中。

在不更改 syslog 配置的情况下,您可以logger像这样使用:

logger -s "foo bar" >> /var/log/mycustomlog

这将指示logger将消息也打印到 STDERR(除了将其记录到 syslog 之外),因此您可以将 STDERR 重定向到文件。但是,这完全没有意义,因为无论如何都已经通过 syslog 记录了消息(使用默认优先级user.notice)。

于 2013-02-23T22:23:35.477 回答
37

logger@chepner 提出了一个专门用于记录消息的好观点。

我确实需要提到@Thomas Haratyk 只是询问我为什么不简单地使用echo.

当时,我不知道回声,因为我正在学习shell-scripting,但他是对的。

我的简单解决方案现在是这样的:

#!/bin/bash
echo "This logs to where I want, but using echo" > /var/log/mycustomlog

上面的示例将覆盖 > 之后的文件

所以,我可以用这个附加到那个文件:

#!/bin/bash
echo "I will just append to my custom log file" >> /var/log/customlog

多谢你们!

  • 顺便说一句,保持我的个人登录只是我个人的偏好/var/log/,但我相信还有其他好主意。而且由于我没有创建守护程序,/var/log/因此可能不是我的自定义日志文件的最佳位置。(只是说)
于 2013-02-23T21:55:13.583 回答
6

通过 shell 的全局变量记录 shell 脚本有很多细节。我们可以在 shell 脚本中模拟类似的日志记录:http ://www.cubicrace.com/2016/03/efficient-logging-mechnism-in-shell.html 这篇文章详细介绍了介绍日志级别,如 INFO 、 DEBUG 、错误。跟踪脚本入口、脚本出口、函数入口、函数出口等细节。

样本日志: 在此处输入图像描述

于 2016-04-14T04:43:11.377 回答
2

如果您看到记录器的手册页:

$ man logger

LOGGER(1) BSD 通用命令手册 LOGGER(1)

NAME logger — syslog(3) 系统日志模块的 shell 命令接口

概要记录器 [-isd] [-f 文件] [-p pri] [-t 标签] [-u 套接字] [消息 ...]

描述 Logger 在系统日志中创建条目。它为 syslog(3) 系统日志模块提供了一个 shell 命令接口。

它清楚地表示它将记录到系统日志。如果要登录到文件,可以使用“>>”重定向到日志文件。

于 2013-02-23T22:10:15.020 回答
2

我通过使用过滤器做到了。现在大多数 linux 系统都使用 rsyslog。配置文件位于/etc/rsyslog.conf/etc/rsyslog.d

每当我运行命令logger -t SRI some message时,我希望“一些消息”只显示在/var/log/sri.log.

为此,我添加了/etc/rsyslog.d/00-sri.conf具有以下内容的文件。

# Filter all messages whose tag starts with SRI
# Note that 'isequal, "SRI:"' or 'isequal "SRI"' will not work.
#
:syslogtag, startswith, "SRI" /var/log/sri.log

# The stop command prevents this message from getting processed any further.
# Thus the message will not show up in /var/log/messages.
#
& stop

然后重启 rsyslogd 服务:

systemctl restart rsyslog.service

这是一个显示结果的 shell 会话:

[root@rpm-server html]# logger -t SRI Hello World!
[root@rpm-server html]# cat /var/log/sri.log
Jun  5 10:33:01 rpm-server SRI[11785]: Hello World!
[root@rpm-server html]#
[root@rpm-server html]# # see that nothing shows up in /var/log/messages
[root@rpm-server html]# tail -10 /var/log/messages | grep SRI
[root@rpm-server html]#
于 2019-06-05T14:43:12.440 回答