C++日志异常到文件,不同的输出

c++ log exception to file, different output

本文关键字:输出 文件 日志 异常 C++      更新时间:2023-10-16

我想将异常记录到文件中,并将其发送到控制台。我的问题是我得到了不同的输出。

void log(std::string str, std::exception e){
    std::ofstream errorfile;
    errorfile.open("errorlog.txt", std::ios::out | std::ios::app);
    errorfile << str << std::endl;
    errorfile << e.what() << std::endl;
    errorfile.close();
}
main()
{
    try
    {
        doSomething();
    }
    catch(std::exception& e)
    {
        std::string str = "functionname()";
        std::cout << str << std::endl;
        std::cerr << e.what() << std::endl;
        log(str, e);
    }
}

现在我得到一个控制台输出,如下所示:

fuctionname()
bind: Address already in use

以及日志文件中的不同输出:

functionname()
std::exception

认识到我使用std::cerr作为我的控制台输出,但我不知道如何使用std::cerr登录到文件。

在函数void log(std::string str, std::exception e) 中,创建异常的副本。

修改函数以类似于void log(std::string &str, std::exception &e)

获取对此对象的引用以保留相同的异常/消息,而不是创建带有空白字段的新异常/消息。

通过这样做,您还将提高性能。