替を標準出力に出力をsyslog
質問
いて知りたいパッケージ OpenTibiaサーバー することが目的です。ものってみたいと思いますが追加で起動によ /etc/init.d
とdaemonizationの otserv
ます。
もうリダイレクト出力するsyslog.これは通常で行います。 syslog()
機能です。現在、コードの炎:
std::cout << "Stuff to printout" << std::endl;
はあるので、簡単に追加する方にリダイレクトの標準出力と標準エラー出力へのsyslogを交換せず毎シングル"call"をstd::cout。
解決
ストレート「C」の答えが足りるかどうかわかりません。しかし、「C」であなたは、介在する「ロガー」プロセスなしで、直接、syslogの呼び出しに(FILE *)をプラグインする基盤となる標準入出力機能を使用することができます。チェックアウト http://mischasan.wordpress.com/2011/05/ 25 /リダイレクト-stderrのツーのsyslog / の
他のヒント
できるパイプお stdout
へ syslog
の logger
コマンド:
名称
logger - a shell command interface to the syslog(3) system log module
概要
logger [-isd] [-f file] [-p pri] [-t tag] [-u socket] [message ...]
説明
Logger makes entries in the system log. It provides a shell command interface to the syslog(3) system log module.
ない場合は供給のメッセージのコマンドラインで読み込み stdin
あなたはRDBUF()コマンドを使ってC ++で任意のストリームをリダイレクトすることができます。これは、ハード実装ではなくには少し複雑です。
あなたは出力がオーバーフロー()にsyslogになりたstreambufを書き、あなたのストリームバッファではstd :: coutのをRDBUFを交換する必要があります。
例えば、そのするファイル(NOエラー処理、テストされていないコード)に出力
#include <iostream>
#include <fstream>
using namespace std;
int main (int argc, char** argv) {
streambuf * yourStreamBuffer = NULL;
ofstream outputFileStream;
outputFileStream.open ("theOutputFile.txt");
yourStreamBuffer = outputFileStream.rdbuf();
cout.rdbuf(yourStreamBuffer);
cout << "Ends up in the file, not std::cout!";
outputFileStream.close();
return 0;
}
ちょうどstdoutとstderrを読み込むことは、適切なスクリプトでバイナリの実行をラップ試してみてください、とsyslog()
を使用して、それらから読み取る任意のデータを送信します。それはラップアプリケーション内の任意のコードの変更なしで動作し、かなり簡単なはずです。
わからない場合があるにパイプにスクリプトを既存のではなく場合は、1つは難しいことではありません書いてます。
私はこれを行いますいくつかのコードを書きました。お使いのシステムに別のAPIへのポートにそれを必要とするかもしれので、
(代わりにASLと投票/のsyslogの代わりにのkeventの選択)、それは、syslogの代りにASLを使用しています、そして、それはkeventがを使用していますhttp://cgit.freedesktop.org/xorg/アプリ/のxinit /木/ launchdの/ console_redirect.cする
また、私は基本的にマウンテンライオンのlibsystem_aslにこれを追加しました。 asl_log_descriptorのmanページをチェックします。
例:
#include <asl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
asl_log_descriptor(NULL, NULL, ASL_LEVEL_INFO, STDOUT_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
asl_log_descriptor(NULL, NULL, ASL_LEVEL_NOTICE, STDERR_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
fprintf(stdout, "This is written to stdout which will be at log level info.");
fprintf(stderr, "This is written to stderr which will be at log level notice.");
return 0;
}