我打算为Debian 打包OpenTibia Server.我想要做的其中一件事是添加启动过程/etc/init.d
和守护otserv
进程.
事实是,我们应该将输出重定向到syslog.这通常通过该syslog()
功能完成.目前,代码集中在:
std::cout << "Stuff to printout" << std::endl;
是否有一种适当的,易于添加的方法将标准输出和标准错误输出重定向到syslog中,而无需将每一个"调用"替换为std :: cout和朋友?
你可以管你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++中重定向任何流.这有点令人费解,但实施起来并不那么难.
您需要编写一个将在overflow()上输出到syslog的streambuf,并用streambuf替换std :: cout rdbuf.
一个例子,它将输出到一个文件(没有错误处理,未经测试的代码)
#include#include 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; }