2013-02-23 93 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