![](/img/trans.png)
[英]PYTHON : How do I make my program produce a file with a random file name
[英]How do I find my program name?
我無法使用 syslog 寫入與默認日志不同的日志。 我不確定我的應用程序名稱在我的配置中是否有誤。 “程序名”和“進程名”不是一個意思嗎? 如果沒有,如何在Python 3.6中找到我的程序名?
我在Python 3.6寫了一個小應用。 我已經成功地使用它寫入 CentOS 7 中/var/log/messages
中的一個通用系統日志文件。 如果我打開那個文件,我可以看到我的條目。
如果我運行ps aux | grep myappname
ps aux | grep myappname
,進程名稱列為python myappname.py
。
我在/etc/rsyslog.d/00-myconfig.conf
創建了一個文件,內容是:
if $programname contains 'myappname' then /home/user/test_log.log
& ~
我已經使用sudo systemctl restart rsyslog
重新啟動了進程。
我運行rsyslogd -N1
,這給了我一個關於我在我的配置中使用~
的棄用警告,證明配置正在被識別。 我已經嘗試刪除該行,因為我不確定它的作用,但這也無濟於事。
我可以確認條目仍在寫入/var/log/messages
。 這些條目並沒有化為烏有。
由於 syslog 自然不會在日志中包含appname ,因此您需要在創建日志消息時自行添加。 這里有一個使用帶有--tag
的 Linux記錄器命令的示例。
logger --tag="myappname" "Some message"
因此,在調整任何內容之前,請檢查您的rsyslog.conf
包含來自/etc/rsyslog.d/
的文件(因為即使您不將它們包含在rsyslog.conf
中,它們也會被檢查。
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf")
如果錯誤仍然存在,則必須調整您的查詢。 最簡單的方法是使用基於屬性的過濾器。
:syslogtag, isequal, "myappname" /var/log/test_log.log
&~
*.* /var/log/messages
配置檢查myappname
是否等於日志中的hostname
。 如果是這樣,它被寫入test_log.log
。 下一行 ( &~
) 然后丟棄所有已寫入的消息。 因此,不會對這些消息應用任何附加規則。 因此,它們不會寫入/var/log/messages
。
重要說明:使用比較操作isequal
時,比較的兩個值必須完全相等(區分大小寫)才能匹配。 有關基於屬性的過濾器的更多信息,請參閱rsyslog 文檔。
PS查看這篇文章,進一步了解&~
在 rsyslog 中的含義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.