Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonからUNIXのsyslogライブラリを操作する方法|syslogモジュールの使い方を解説

UNIXのsyslogライブラリにアクセスしてシステムログを出力するには、Python標準ライブラリのsyslogモジュールを使用します。このモジュールには、システムロガーとやり取りするためのさまざまな関数が用意されており、アプリケーションから簡単にログを記録できます。

このモジュールを使用するには、まず以下のようにインポートします。

import syslog

主なメソッド一覧

syslog.syslog(message) または syslog.syslog(priority, message)

文字列型のメッセージをシステムロガーへ送信します。各メッセージには優先度が割り当てられており、priority引数を指定することで、そのメッセージの重要度(LOG_INFO、LOG_NOTICE、LOG_ERRなど)を設定できます。

syslog.openlog([ident[, logoption[, facility]]])

以降のsyslog呼び出しに対するロギングオプションを設定します。ident引数は文字列型で、ここで指定した識別子がすべてのメッセージの先頭に付加されます。これにより、どのプログラムが出力したログかを容易に判別できるようになります。

syslog.closelog()

syslogモジュールの状態をリセットします。呼び出すことで、モジュールをインポートした直後の初期状態に戻すことができます。

syslog.setlogmask(maskpri)

優先度マスクをmaskpriに設定し、設定前のマスク値を返します。優先度が指定されていない場合、maskpriは無視されます。このマスクを利用すると、特定の優先度以上のログだけを記録するといった制御が可能です。

サンプルコード

以下は、実際にsyslogモジュールを使ってログを出力するシンプルな例です。

import syslog, sys
syslog.openlog(sys.argv[0])
syslog.syslog(syslog.LOG_NOTICE, "This is a Log Notice")
syslog.openlog()

このコードでは、openlog()でスクリプト名を識別子として設定し、syslog()によってNOTICEレベルのメッセージを送信しています。

実行結果

$ python3 posix_example.py
$ sudo cat /var/log/syslog
Oct  7 00:05:23 unix_user-VirtualBox anacron[14271]: Job `cron.daily' terminated
Oct  7 00:05:23 unix_user-VirtualBox anacron[14271]: Normal exit (1 job run)
Oct  7 00:17:01 unix_user-VirtualBox CRON[14396]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Oct  7 00:22:35 unix_user-VirtualBox gnome-software[1599]: no app for changed ubuntu-dock@ubuntu.com
Oct  7 00:22:35 unix_user-VirtualBox gnome-software[1599]: no app for changed ubuntu-appindicators@ubuntu.com
Oct  7 00:22:36 unix_user-VirtualBox gnome-shell[1296]: [AppIndicatorSupport-DEBUG] Registering StatusNotifierItem :1.59/org/ayatana/NotificationItem/software_update_available
Oct  7 00:22:37 unix_user-VirtualBox gvfsd-metadata[3664]: g_udev_device_has_property: assertion 'G_UDEV_IS_DEVICE (device)' failed
Oct  7 00:22:37 unix_user-VirtualBox gvfsd-metadata[3664]: g_udev_device_has_property: assertion 'G_UDEV_IS_DEVICE (device)' failed
Oct  7 00:25:47 unix_user-VirtualBox snapd[5511]: storehelpers.go:398: cannot refresh: snap has no updates available: "core", "gnome-3-26-1604", "gnome-calculator", "gnome-characters", "gnome-logs", "gnome-system-monitor", "gtk-common-themes"
Oct  7 00:25:47 unix_user-VirtualBox snapd[5511]: autorefresh.go:387: auto-refresh: all snaps are up-to-date
Oct  7 00:27:32 unix_user-VirtualBox example.py: This is a Log Notice

出力の最終行「example.py: This is a Log Notice」が、今回のスクリプトから書き込まれたログです。openlog()で指定した識別子がメッセージの先頭に付加されていることが確認できます。このように、syslogモジュールを使えば、OS標準のログ管理機構に沿った形でアプリケーションのログを記録できます。

  1. Scikit-learnで機械学習モデルを構築する方法|Python機械学習ライブラリ入門

    本記事では、Pythonの無料機械学習ライブラリ「Scikit-learn」を使った学習モデルの構築方法を解説します。Scikit-learnはオープンソースで提供されている機械学習ライブラリで、ランダムフォレスト、サポートベクターマシン(SVM)、k近傍法(k-NN)など、多彩なアルゴリズムをサポートしています。また、NumPyやSciPyと直接連携して動作するため、数値計算との親和性が高く、初心者から実務者まで幅広く利用されています。1. データセットのインポートまずは分析対象となるデータセットを読み込みます。Pandasのread_csvメソッドを使えば、URLを指定するだけでCSV形式

  2. Pythonの低レベルネットワークインターフェース(ソケット)の基礎と使い方

    Pythonの標準ライブラリに含まれる「socket」モジュールは、OSが提供するソケットエンドポイントを利用して、サーバーマシンとクライアントマシンが通信するための仕組みを定義しています。socket APIには、コネクション型(接続指向)プロトコルとコネクションレス型(非接続型)プロトコルの両方に対応した関数が用意されています。 ソケットとは、双方向通信リンクの「終端(エンドポイント)」のことです。IPアドレスとポート番号によって識別され、通信を開始するには両端でソケットを適切に設定する必要があります。これにより、クライアント・サーバー環境において、着信メッセージを待ち受け、応答を送り返