java - 多线程应用程序中的可选调试输出——我的意思是*针对客户端*,而不是为了找出死锁或错误

标签 java multithreading java-7

我正在处理 my first multi-threaded application ,为了学习。我真的需要学习它。我已经有一个单线程函数,可以读取目录中的所有文本文件,并将所有缩进选项卡替换为三个空格。

它能够传递 Appendable为了可选的额外信息(列出每个文件,提供统计数据等)。如果他们传入 null,则他们不需要调试。

我试图确定在多线程版本中处理此问题的最佳方法是什么,但是搜索“调试多线程 java”除了如何诊断错误和死锁之外什么也没给我。

我可以安全地坚持使用 Appendable 还是应该考虑其他事情?我不确定如何处理交错消息,但我想弄清楚的第一件事是线程安全。

最佳答案

考虑使用slf4j,而不是传递Appendable在您的库中进行日志记录。

如果在运行时没有链接任何日志记录框架,则不会进行任何日志记录。如果应用程序已经在进行日志记录,那么可能有一个 slf4j 将输出到的前端。

我建议使用 Logback对于您的日志输出,因为它可以通过配置文件或直接在代码中很好地配置。要获得基本输出,您所需要做的就是包含 JAR。

关于java - 多线程应用程序中的可选调试输出——我的意思是*针对客户端*,而不是为了找出死锁或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29304826/

相关文章:

multithreading - 如何保持在内存的范围内

c# - WaitHandle.WaitAll 上的 NotSupportedException

java - 减少 Lucene 文档索引的内存使用量

java - 变量可能尚未初始化

c - 带链表的多线程

java - 为什么 java7 对 double 的和给出错误输出

java - 如果 jar 文件大于特定大小,Applet 无法在 Windows 7 上使用 Java 1.7 加载

java - 需要为 EmptyStacks 创建一个新的 RunTimeException

java - android中的河豚加密

java - 如何转换 UTC 日期字符串并删除 Java 中的 T 和 Z?