当前位置:  开发笔记 > 编程语言 > 正文

将标准输出重定向到syslog

如何解决《将标准输出重定向到syslog》经验,为你挑选了2个好方法。

我打算为Debian 打包OpenTibia Server.我想要做的其中一件事是添加启动过程/etc/init.d和守护otserv进程.

事实是,我们应该将输出重定向到syslog.这通常通过该syslog()功能完成.目前,代码集中在:

std::cout << "Stuff to printout" << std::endl;

是否有一种适当的,易于添加的方法将标准输出和标准错误输出重定向到syslog中,而无需将每一个"调用"替换为std :: cout和朋友?



1> Alnitak..:

你可以管你stdoutsysloglogger命令:

名称

 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



2> Pieter..:

您可以通过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;
 }

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有