2013-02-23 95 views
28

在Linux中,我知道如何编写一个简单的消息给/var/log/messages文件,在一个简单的shell脚本我创建:的Bash 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

不能只需要替换* *记录器与*回声*? – jazzytomato 2013-02-23 21:32:51

+0

我不认为你可以:http://stackoverflow.com/questions/13423303/how-can-i-log-to-a-specific-file-in-linux-using-logger-command – squiguy 2013-02-23 21:36:49

+0

重定向标准输出不起作用,因为'logger'不会写入标准输出;它写入由'syslog(3)'配置的文件来接收日志消息。 – chepner 2013-02-23 21:43:29

回答

24

@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/可能不是我自定义日志文件的最佳位置。 (随便说)
+3

'/ var/log'绝对是几乎任何类型日志的最佳场所。 – 2013-02-23 22:28:40

+6

@Ansgar努力避免分散回复。 – 2013-02-24 15:59:52

3

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

$ man logger 

记录仪(1)BSD通用命令手册记录仪(1)

名称记录器 - 一个shell命令接口到syslog(3)系统日志 模块

概要记录器[-isd] [-f文件] [-p PRI] [-t标签] [-u插座] [讯息... ]

说明记录器在系统日志中记录条目。它为syslog(3)系统日志模块提供了一个 shell命令接口。

它很明显地说它会登录到系统日志。如果你想登录文件,你可以使用“>>”重定向到日志文件。

29

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

local7.* -/var/log/mycustomlog 

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

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

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

未做更改syslog配置,你可以使用logger这样的:

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

这将指示logger打印的邮件到STDERR以及(除了它记录到系统日志),所以你可以将STDERR重定向到一个文件。但是,这完全没有意义,因为消息已经通过系统日志记录(默认优先级为user.notice)。

5

通过shell的全局变量对shell脚本进行日志记录有很多细节。我们可以在shell脚本中模拟类似的日志记录:http://cubicrace.com/2016/03/efficient-logging-mechnism-in-shell.html

该文章详细介绍了INFO,DEBUG,ERROR等日志级别。跟踪详细信息,如脚本输入,脚本退出,函数输入,函数退出。

示例日志: enter image description here