如何实现应用程序事件记录器
How to implement application events logger
在我的应用程序中,需要记录应用程序中发生的各种事件。例如,我需要记录从服务器下载文件的事件,并指定下载时间,服务器ip地址等。从结构上讲,所有这些数据分布在应用程序中的各个类中。
我的解决方案是创建一个单例类,例如命名为'ApplicationEvents',并在其中处理应用程序事件。为例子:void OnFileDownloaded() {
...
ApplicationEvents::Instance()->FileDownloaded(fileId_);
}
但是这看起来像一个混乱的代码,几乎不可能测试。
另一个解决方案是在main函数中创建ApplicationEvent,并将其作为参数传递给类的构造函数。为了避免代码混乱,可以使用装饰器或代理模式。
例如:'FileDownloader'和装饰类'LoggingFileDownloader'。但是应用程序的结构将更加复杂,许多类只是将指向ApplicationEvents的指针传递给其他类,在我的情况下可能是多余的。哪个解决方案是最好的?
我不明白为什么不可能进行测试。您应该在应用程序之外测试日志模块,一旦它被验证,就直接使用它。您不必将它与应用程序一起测试。此外,它看起来像普通的代码,使用Singleton只是对代码的一次调用。另一种选择是使用发布/订阅(或观察者)来发布消费事件,但它将更加抽象并且难以跟踪。在调试过程中,我认为它只适用于其他类型的场景,例如,许多订阅者对某些事件感兴趣。另一种更激进的方法是使用AOP,因为日志记录是交叉关注的更常见的例子,但是对于c++来说,AOP只有几个实验性的库。
对于这个问题,我已经创建了一个日志类,我在主程序中分配它,然后我在我的类中使用它。因为我不想减慢我的应用程序与日志记录器运行在Cpp11下的另一个线程。
但我必须改进它以捕获标准输出。
如果你想看一下:https://github.com/Waxo/lightweight_logger
相关文章:
- 如何创建事件驱动的 SDL2 应用程序
- Qt应用程序不响应鼠标和键盘事件
- 是否可以在QT GUI应用程序中处理事件时播放加载动画指示器?
- QT应用程序意外的语言事件
- 如何在Cocos2d Android应用程序中获得呼叫/挂起事件
- 在我的应用程序中侦听 iexplorer 的关闭事件
- 如何在 Windows 上的C++控制台应用程序中捕获 ctrl-c 事件,而不会进入无限循环
- 我可以在形式的应用程序中查询用户交互事件
- 如何重新校准Qt应用程序的触摸事件
- C++(MFC)应用程序与CWebBrowser2 -> ChromeFrame->HTML5应用程序,如何将点击事件从HTML5获取到C++应用程序?
- OSX-Qt应用程序在接收系统事件QEvent::FileOpen时崩溃
- 使应用程序被动,由事件触发
- 在控制台应用程序中捕获关闭事件并阻止关闭
- 在c++/cli控制台应用程序中处理停止或退出事件
- 使用Windows中另一个进程的事件循环向Qt应用程序发送退出消息
- 要求在应用程序启动之前完成特定事件
- 当事件循环未启动时,不优雅/杀死Qt应用程序
- 关于 VS c++ 中用于 MFC 应用程序的事件处理程序的 desgin 约定
- 如何实现应用程序事件记录器
- 将应用程序事件从c++公开到Java