Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SLF4J适合在多线程应用程序中用于登录数据库吗?_Java_Logging_Log4j_Slf4j - Fatal编程技术网

Java SLF4J适合在多线程应用程序中用于登录数据库吗?

Java SLF4J适合在多线程应用程序中用于登录数据库吗?,java,logging,log4j,slf4j,Java,Logging,Log4j,Slf4j,我正在开发一个多线程应用程序。我已经在使用Log4j将语句记录到文件中 我最近一直在研究登录Mysql数据库的可能性。 日志记录组件必须在重载下可靠,并且必须是线程安全的。 我听说过SFL4J。我对SLF4J的理解是,它只是一个外观或抽象层。 我想知道SLF4J是否是一个很好的数据库日志记录解决方案,可以在 多线程应用程序 在负载很重的情况下,添加一个层(如缓冲区或队列)并让线程记录到该层,而不是直接调用日志线程(日志线程会将队列中找到的语句逐个发送到数据库),这是一个好主意吗 任何提示、最



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

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

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

  • 在负载很重的情况下,添加一个层(如缓冲区或队列)并让线程记录到该层,而不是直接调用日志线程(日志线程会将队列中找到的语句逐个发送到数据库),这是一个好主意吗
任何提示、最佳实践或代码示例都将不胜感激,

就这点而言,

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


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

请注意,slf4j+logback是目前的实际标准。关于多线程,请务必阅读slf4j/log4j/logback的MDC功能。伟大的线程相关功能。实际上,slf4j的最大价值在于它在第三方库(如Hibernate或内部组件库)中的使用。这允许这些库神奇地使用您选择的任何底层日志框架。比如说,在MVC应用程序中使用它,您的收益要少得多,因为决定更改日志框架的真正可能性和价值是什么?我是否需要使用像C3P0这样的连接池来管理不同线程之间的数据库日志记录?@Alain:是的,您需要一个连接池。实际上,如果是我,我会考虑将日志条目写入文件,然后有一些工作任务读取文件并写入数据库。log4j中的数据库日志附加器有问题。@Nathan:谢谢你的回答,但是Logback的dbappender呢?网络上有没有关于建立连接池的例子,我没有发现任何有用的东西?@Alain:我不知道,logback的dbappender显然比log4j的dbappender有所改进。