简述
程序的运行日志,通常只给开发人员和运维人员——也就软件开发公司内部——查看,而不是给最终用户查看。
举个极端的例子,假设我们有一个软件系统,可以让用户(已经完成注册)输入希望自己在本系统中的称呼。然后,老有个别用户在这个环节,输入 “爸爸”。
这个太令人生气了!
原有的功能代码示例如下:
std::string InputTitle(std::string const& name)
{
std::cout << "亲爱的 " << name << ",你希望大家都怎么称呼你呀?";
std::string title;
std::getline(std::cin, title);
std::cout << "好的,亲爱的 " << name
<< ",以后我们大家就叫你:" << title << "了。" << std::endl;
return title;
}
现在,我们为这个函数加入日志功能,记录所有人设置成尊称,并且,针对“爸爸”或“爷爷”这种气人的昵称,特别 记录下来:
std::string InputTitle(std::string const& name)
{
std::cout << "亲爱的 " << name << ",你希望大家都怎么称呼你呀?";
std::string title;
std::getline(std::cin, title);
///// 记录日志开始 /////
std::cout << name << "->" << title;
if (name == "爸爸" || name == "爷爷")
{
std::cerr << "抓到一个坏家伙:" << name << std::endl;
}
///// 记录日志结束 /////
std::cout << "好的,亲爱的 " << name
<< ",以后我们大家就叫你:" << title << "了。" << std::endl;
return title;
}
这样的代码有许多不好之处:
- 仅用于内部的日志输出,和具体的业务输出内容,混在一起;
- 日志没有记录到单独文件中去,程序一退出就丢了,不利于使用;
- 直接 cout 等语言内置的输出流对象,很难从代码一眼识别出哪里是日志。
我们需要设计一个“日志类”,设名为 “Loger”。借助该类的某个对象,我们希望它在使用上,和 cout 等内置对象非常接近,但又能满足可同时向多个日志保存位置输出,比如屏幕(固定)或文件(可选)。
视频
我们在书本原有内容的基础上,增加了日志流改进(更贴近企业项目),升级内容(含第四步视频及完整文字课程)需付费购买。