在Linux中,我知道如何在我创建的简单shell脚本中向/var/log/messages
文件写一条简单的消息:
#!/bin/bash
logger "have fun!"
我想停止将邮件投放到默认的/var/log/messages
文件中,并创建自己的邮件。
我试过了:
#!/bin/bash
logger "have more fun" > /var/log/mycustomlog
它仍会记录到/var/log/messages
。它确实创建了/var/log/mycustomlog
,但它是空的。
任何人都能看到我错过的东西吗?
答案 0 :(得分:34)
logger
登录到syslog工具。如果要将消息转到特定文件,则必须相应地修改syslog配置。您可以添加如下所示的行:
local7.* -/var/log/mycustomlog
并重新启动syslog。然后你可以这样记录:
logger -p local7.info "information message"
logger -p local7.err "error message"
并且消息将显示在具有正确日志级别的所需日志文件中。
如果不对syslog配置进行更改,可以使用logger
,如下所示:
logger -s "foo bar" 2>> /var/log/mycustomlog
这将指示logger
将消息打印到STDERR(除了将其记录到syslog之外),因此您可以将STDERR重定向到文件。但是,它完全没有意义,因为消息已经通过syslog记录(默认优先级为user.notice
)。
答案 1 :(得分:30)
@chepner强调logger
专门用于记录消息。
我确实需要提一下@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/
可能不是我的自定义日志文件的最佳位置。 (只是说)答案 2 :(得分:6)
通过shell的全局变量来记录shell脚本有很多细节。我们可以在shell脚本中模拟类似的日志记录:http://www.cubicrace.com/2016/03/efficient-logging-mechnism-in-shell.html 该帖子详细介绍了介绍日志级别,如INFO,DEBUG,ERROR。跟踪脚本输入,脚本退出,功能输入,功能退出等详细信息。
答案 3 :(得分:4)
如果您看到记录器的手册页:
$ man logger
LOGGER(1)BSD通用命令手册LOGGER(1)
NAME logger - syslog(3)系统日志的shell命令接口 模块
SYNOPSIS logger [-isd] [-f file] [-p pri] [-t tag] [-u socket] [消息...]
说明Logger在系统日志中输入条目。它提供了一个 shell命令接口到syslog(3)系统日志模块。
显然它会记录到系统日志。如果您要登录文件,可以使用“>>”重定向到日志文件。
答案 4 :(得分:0)
我通过使用过滤器做到了。如今,大多数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]#