【问题标题】:Is SLF4J good to be used in a multithreaded application for logging to a database?SLF4J 是否适合在多线程应用程序中用于记录到数据库?
【发布时间】:2012-10-31 13:30:45
【问题描述】:



我正在开发一个多线程应用程序。我已经在使用 Log4j 将语句记录到文件中。
我最近一直在研究登录到 Mysql 数据库的可能性。

日志记录组件必须在重负载下可靠并且必须是线程安全的。
我听说过 SFL4J。我对 SLF4J 的理解是,它只是一个门面或抽象层。

  • 我想知道 SLF4J 是否是一个很好的数据库日志记录解决方案,可用于 多线程应用程序?

  • 在负载很重的情况下,添加一个层(如缓冲区或队列)并让线程记录到它而不是直接调用记录线程是一个好主意(记录线程将发送将队列中找到的语句一一存入数据库)?

任何提示、最佳实践或代码示例将不胜感激,
问候,

【问题讨论】:

标签: java logging log4j slf4j


【解决方案1】:

你说得对,SFL4J 只是一个门面,它允许库和框架的编写者通过门面进行日志记录,并让应用程序指定自己的日志记录框架。在应用程序级别没有使用 SLF4J 的令人信服的理由,您不妨直接使用 log4j。唯一的好处是您可以在未来的某个日期切换到 logback,而更改较少。这并不是那么引人注目,除非您不确定要使用哪种日志记录实现,在这种情况下,您可以使用抽象层,以便在比较测试中交换实现。

使用 SLF4j 不会影响并发。您可能想为实际的记录器考虑不同的附加程序(或滚动您自己的附加程序),但它不会影响您调用 SLF4J 的方式。唯一会影响并发的地方是 appender。

【讨论】:

  • 真的,slf4j 的最大价值在于它可以在 Hibernate 等第三方库或内部组件库中使用。这允许这些库神奇地使用您选择的任何底层日志记录框架。在 MVC 应用程序中使用它所获得的收益要少得多,因为决定更改日志框架的真正可能性和价值是什么?
  • 我是否需要使用像 C3P0 这样的连接池来管理不同线程之间的数据库日志记录?
  • @Alain:是的,你需要一个连接池。实际上,如果是我,我会考虑将日志条目写入文件,然后让一些工作任务读取文件并写入数据库。 log4j 中的数据库日志附加程序存在问题。
  • @Nathan:感谢您的回答,但是 Logback 的 dbappender 呢?网上有没有设置连接池的例子,我没找到有用的?
  • @Alain: 我不知道,logback 的 dbappender 显然比 log4j 的有所改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2019-05-19
  • 2012-09-24
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多