アプリケーションの printf ログ メッセージを /var/log/messages に渡したいです。カーネル デバッグ メッセージは /var/log/messages に表示される可能性があるため、アプリケーションの printf ログ メッセージを /var/log/messages に渡す方法がわかりません。誰でもこれを行う方法を教えてください。
1 に答える
たとえば、次のように変更します。
printf("The error was %s\n", strerror(errno));
に:
syslog(LOG_ERR, "The error was %s", strerror(errno));
syslog は、常に一度に 1 行ずつ送信されることに注意してください (必要はありません\n
)。
ロギング オプションをより詳細に制御するopenlog()
には、 への呼び出しの前に関数を使用しますsyslog()
。詳細については、openlog の man ページを参照してください。
syslog は、メッセージの優先度syslog
(LOG_ERR
上記のサンプルの最初の引数) とファシリティに基づいてメッセージをルーティングします。ファシリティは への呼び出しで設定されるopenlog()
か、デフォルトで に設定されLOG_USER
ます。syslog 構成ファイルの基本的な構文は、次の形式の行です。
selector[;selector] destination
セレクターは次のとおりです。
facility[,facility].priority
(ファシリティおよび/または優先度はワイルドカードにすることができます*
)。優先度には、より高い優先度がすべて暗黙的に含まれます。
宛先は、ファイル、リモートホスト、プログラム、またはユーザー (のリスト) です。いくつかの例:
*.* ihateyou -- every message sent to this user
*.debug * -- to every logged in user!
*.emerg root,bob,tom -- emergencies to these three
*.err /var/log/all-errors -- all LOG_ERR and above to this file
cron.info |/some/program -- pipe these to /some/program
user.* @some.host.com -- send these to this host
cron,user.crit /this/file -- an example with multiple facilities
lpr.err;ftp.warn /other/file -- an example with multiple selectors
追加のオプションがいくつかある場合があります (たとえば、優先度としての「なし」、=warn のような特定の優先度、および !=warn のような否定)。それらの詳細については、syslog.conf のマンページを参照してください。
システムが syslog メッセージをルーティングする方法については、syslog 構成ファイル (通常は /etc/syslog.conf) を参照してください。注: 一部のシステムでは、nsyslog
またはのような syslog のバリアントを実行しrsyslog
ます。これらにはより多くのオプションがあるため、構成ファイルがより複雑になる可能性があります。
既知のファシリティは、LOG_AUTH、LOG_AUTHPRIV、LOG_CRON、LOG_DAEMON、LOG_FTP、LOG_KERN、LOCAL_LOCAL0 .. LOG_LOCAL7、LOG_LPR、LOG_MAIL、LOG_NEWS、LOG_SYSLOG、LOG_USER、LOG_UUCP です。(LOG_KERN はユーザー プロセスでは使用できません) 通常、LOG_DAEMON、LOG_LOCAL n、または LOG_USER のいずれかが最適な選択です。
既知の優先度 (重大度とも呼ばれます) は、(高いものから低いものへ) LOG_EMERG、LOG_ALERT、LOG_CRIT、LOG_ERR、LOG_WARNING、LOG_NOTICE、LOG_INFO、LOG_DEBUG です。