c++ - 在哪里声明这个记录器对象?

标签 c++ oop object logging

我正在尝试编写一个简单的日志文件编写器,该编写器将在一个项目中的许多 .cpp 文件中使用。 到目前为止,这是代码:

enter code here
#include"log.h"
logger::logger()
{
    m_outStream.open("LogFile");
    m_outStream<<"********** LOG ENTRY STARTED **********"<<endl;
}

logger::~logger()
{
   m_outStream.close();
}

void logger::logEntry(const char* filename, const unsigned long lineno,  const char* str) 
{
    m_outStream<<"--> NAME: "<<filename<<" | LINE NUMBER : "<<lineno<<" | "<<str<<endl;
} 

主要可以是这样的

main()
{
    func1();
    func2();
    .
    .
    .
}

从 main 调用的函数可能会在其主体中调用其他函数。 现在,我如何或在哪里声明一个 logObject 以确保在每个函数内,我将有一个可用的 logObject,这将有助于我调用 logEntry()。

我想在某个地方公开它,我认为这对我的情况有意义,但我不确定这是否是一个好的做法。处理日志文件的对象应该是公共(public)的吗?有什么见解吗?

最佳答案

我建议使用单例模式来实现这一点。它经常用于全局功能,例如整个应用程序所需的日志记录。

每次需要记录某些内容时创建一个新实例是没有意义的,因此这就是为什么单例模式非常适合。它将在您第一次需要记录时创建一个实例,或者如果已经实例化则返回一个实例。

定义它后,您可以将其包含在需要使用它的任何地方(如果您遇到问题,请参阅第二个示例以了解如何包含它)。

请参阅first example herethis sample implementation如果您更喜欢,还可以引用this existing thread .

祝你好运!如果您需要更多信息,请告诉我。

关于c++ - 在哪里声明这个记录器对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29787366/

相关文章:

c++ - "Undefined"C++类成员引用

function - 将继承的帧作为参数传递给过程

javascript - 使用 forEach 访问对象数据,而不使用 forEach 的 thisArg?

Java 脚本引擎 : using value on Java side?

c# - 如何检查对象的一个​​值是否为 null

Java 嵌入式静态接口(interface)

c++ - OpenGL 应用程序在其他计算机上崩溃

c++ - 如何只检测一次相同的键盘按键

c++ - 如何在可变参数模板中声明 "implicit conversion"?

c++ - Gtkmm - 在不关闭应用程序的情况下隐藏窗口