web-dev-qa-db-ja.com

Bashスクリプトからカスタムログファイルに書き込む

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は作成されましたが、空です。

誰が私が行方不明になっているのを見ますか?

34
coffeemonitor

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)。

35
Ansgar Wiechers

@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/は、おそらく私のカスタムログファイルに最適な場所ではありません。 (ただ言って)
31
coffeemonitor

シェルのグローバル変数を介したシェルスクリプトのログに関する詳細はかなりあります。シェルスクリプトで同様のログ記録をエミュレートできます。 http://www.cubicrace.com/2016/03/efficient-logging-mechnism-in-Shell.html INFO、DEBUG、ERRORなどのログレベル。スクリプトエントリ、スクリプト出口、関数エントリ、関数出口などの詳細をトレースします。

サンプルログ: enter image description here

6
Piyush Chordia

ロガーのマニュアルページが表示された場合:

$ man logger

LOGGER(1)BSD一般コマンドマニュアルLOGGER(1)

NAMEロガー— syslog(3)システムログモジュールへのシェルコマンドインターフェース

概要ロガー[-isd] [-fファイル] [-p pri] [-tタグ] [-uソケット] [メッセージ...]

説明ロガーはシステムログにエントリを作成します。 syslog(3)システムログモジュールへのシェルコマンドインターフェイスを提供します。

システムログに記録することを明確に述べています。ファイルにログを記録する場合は、「>>」を使用してログファイルにリダイレクトできます。

3
pallav_rus

フィルターを使用してそれを行いました。最近、ほとんどの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]#
0
shrewmouse