日志框架注意事项
Logging Framework considerations
我正在设计一个日志服务器。这个应用程序的业务逻辑是用多种语言编写的(c++;目前是Java,但其他语言可能会在以后的阶段添加到混合中。
我正在考虑使它成为一个具有良好定义的接口的单独服务器,以确保我不需要在以后的日期将其移植到其他语言。对于可伸缩性,主应用程序能够在负载平衡器支持的多台机器上运行多个实例。
设计的一个重要考虑因素(除了通常的日志级别)是性能和对多个日志目标(平面文件、控制台、DB等)的支持。
如何确保日志记录器不会影响应用程序的性能?使用套接字进行通信有意义吗?有更好的方法吗?
是否需要共享所有日志?我会使用任何日志机制是最好的每个阶段的逻辑(log4j或java的日志在java中,我想我不知道c++的日志库足够建议一个。)
在大多数情况下,日志应该只用于调试和应用程序外部解析。我不建议将日志记录集成为业务逻辑的一部分。如果您确实需要日志中的数据,那么您最好直接进行通信,而不是将日志输出给另一个应用程序。
如果你绝对需要它,你可以有一个外部的(非常低优先级)应用程序来获取日志并将它们发送回一个集中的日志服务器。
有些数据需要接近实时地查看,有些数据需要记录以便离线处理。他们有不同的要求。
实时数据需要采用机器可读的格式,并且通常定向到使用它的地方。中央日志记录器可以在此路径上,前提是它不会不可接受地延迟实时信息。为此,我将使用套接字(或JMS)而不是缓冲文件。
脱机处理日志可以是机器可读的格式(用于夜间报告),也可以是人类可读的格式(用于调试)。为此,我将使用文件或数据库,或者两者兼而有之。文件可以更容易管理,特别是如果文件很大。数据库使构建报告更容易。
无论哪种情况,我都会将需要通过套接字发送或写入文件的信息传递给另一个线程,以便系统中的任何随机延迟都不会影响生成日志的代码。实际上,我会考虑延迟发送任何日志,直到关键流程完成。也就是说,你先处理所有需要做的事情,然后再记录所有感兴趣的事情。
检查一下:http://logging.apache.org/log4j/1.2/manual.html
查看性能部分。它将解决您对应用程序中日志开销的担忧。
就支持多个日志目标而言,这很容易通过log4j实现,但您需要深入研究一些细节(请参阅我发布给您的URL)。
总的来说,根据我的经验,log4j非常出色。我已经产生了成千上万的静电&动态日志"相当大的规模"(对于我的应用程序-这个术语可能会对您的应用程序有不同的解释)没有任何问题,尽管我执行了繁重的处理(对于历史,我正在本地PC上评估/模拟分布式P2P算法,尽管为模拟创建了数百个日志记录器实例,但一切都很顺利)。
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- catch框架有没有办法比较流或文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 为大型项目编写固件时应注意的注意事项
- 结合整数和浮点数:性能注意事项
- "protected versus private"注意事项
- 将两个C++类封装到一个具有性能注意事项的高级类中
- 在字符串中搜索 UTF-8 码位时的任何注意事项
- 在C++COM(ATL)中添加新接口时需要注意哪些事项
- 构建 R 包:检查包时"Found 'rand', possibly from 'rand' (C)"注意事项
- 设计注意事项-C++服务器开发
- 多线程的内存注意事项
- 使用 std::vector<boost::shared_ptr<Base_Class>> 或 boost::p tr_vector 的性能注意事项是什么<Base>
- 在std::容器中选择存储值还是存储指针时的注意事项
- 像调用普通方法一样调用构造函数和析构函数的注意事项和风险
- 关于类型移动语义的注意事项
- 日志框架注意事项
- 基准测试注意事项和确定性数据收集
- QML/D文本编辑器和基本注意事项
- RPC、套接字和性能注意事项