Linuxでは、作成した単純なシェルスクリプトで、/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
は作成されましたが、空です。
誰が私が行方不明になっているのを見ますか?
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
に(syslogへのログ記録に加えて)メッセージをSTDERRにも出力するよう指示するので、STDERRをファイルにリダイレクトできます。ただし、とにかくsyslog経由でメッセージが既にログに記録されているため(デフォルトの優先度user.notice
)。
@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/
は、おそらく私のカスタムログファイルに最適な場所ではありません。 (ただ言って)シェルのグローバル変数を介したシェルスクリプトのログに関する詳細はかなりあります。シェルスクリプトで同様のログ記録をエミュレートできます。 http://www.cubicrace.com/2016/03/efficient-logging-mechnism-in-Shell.html INFO、DEBUG、ERRORなどのログレベル。スクリプトエントリ、スクリプト出口、関数エントリ、関数出口などの詳細をトレースします。
ロガーのマニュアルページが表示された場合:
$ man logger
LOGGER(1)BSD一般コマンドマニュアルLOGGER(1)
NAMEロガー— syslog(3)システムログモジュールへのシェルコマンドインターフェース
概要ロガー[-isd] [-fファイル] [-p pri] [-tタグ] [-uソケット] [メッセージ...]
説明ロガーはシステムログにエントリを作成します。 syslog(3)システムログモジュールへのシェルコマンドインターフェイスを提供します。
システムログに記録することを明確に述べています。ファイルにログを記録する場合は、「>>」を使用してログファイルにリダイレクトできます。
フィルターを使用してそれを行いました。最近、ほとんどの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
結果を示すシェルセッションは次のとおりです。
[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]#