当我运行多个线程时,我会在System.out.println
输出中丢失,因为我认为每个线程必须位于不同的控制台中。
有没有一种使用Eclipse管理它的简单方法?
编辑:问题是不知道哪个邮件属于每个帖子。确切的问题是控制台在调用新线程时停止打印,log4j也是如此。
答案 0 :(得分:3)
我建议您切换到比System.out.println
更好的日志记录工具,log4j是一种流行的选项。
如果您不想为此目的包含其他库,我建议您
Thread.setName
)Thread.currentThread().getName()
为每行输出添加前缀。如果您认为太“侵入性”或如果您正在处理遗留代码,则可以创建自己的PrintStream
,其中每个参数前缀为println
当前线程名称(如上所述)然后执行System.setOut(new YourThreadLoggingPrintStream());
。
答案 1 :(得分:1)
您可以使用log4j并为每个线程设置不同的Logger,将每个记录器连接到不同的Eclipse视图,但这将是您应用中的大量配置和大量编码。或者,如果您只是将线程ID与消息一起记录,那么即使所有线程都记录到同一视图,您也可以告诉打印出哪个线程。
答案 2 :(得分:1)
如果使用log4j,则可以使用嵌套诊断上下文保持线程的日志记录。
以下是来自the log4j manual的NDC的说明:
大多数真实世界的系统必须处理多个客户端 同时。在这种典型的多线程实现中 系统,不同的线程将处理不同的客户端。记录是 特别适合跟踪和调试复杂的分布式 应用。区分日志记录输出的常用方法 另一个客户端是为了实例化一个新的独立记录器 每个客户。这促进了记录器的增加和增加 记录的管理开销。
较轻的技术是对发起的每个日志请求进行唯一标记 来自相同的客户互动。尼尔哈里森描述了这种方法 在模式中的“用于记录诊断消息的模式”一书中 程序设计3的语言,由R. Martin,D。Riehle和F.编辑。 Buschmann(Addison-Wesley,1997)。
为了唯一标记每个请求,用户按下上下文信息 进入NDC,Nested Diagnostic Context的缩写。 NDC 课程如下所示。
public class NDC { // Used when printing the diagnostic public static String get(); // Remove the top of the context from the NDC. public static String pop(); // Add diagnostic context for the current thread. public static void push(String message); // Remove the diagnostic context for this thread. public static void remove(); }
NDC作为一堆上下文信息按线程进行管理。 请注意,org.apache.log4j.NDC类的所有方法都是静态的。 假设每次日志请求都打开NDC打印 make,适当的log4j组件将包括整个NDC 在日志输出中为当前线程堆栈。这是没有的 用户的干预,只负责放置 通过使用a中的push和pop方法在NDC中更正信息 代码中几个明确定义的点。相比之下,每个客户 记录器方法命令对代码进行大量更改。
为了说明这一点,让我们以servlet为例 向众多客户提供内容。 servlet可以构建NDC 在执行其他代码之前的请求的最开始。该 上下文信息可以是客户端的主机名和其他信息 请求固有的信息,通常包含的信息 在饼干中。因此,即使servlet正在为多个客户端提供服务 同时,由相同代码发起的日志,即属于 因为每个客户端仍然可以区分相同的记录器 请求将具有不同的NDC堆栈。与此对比 将新实例化的记录器传递给所有代码的复杂性 在客户的要求下行使。
答案 3 :(得分:0)
我刚配置为将所有日志写入文件。
<appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="home/.../mylog.log" />
<param name="MaxFileSize" value="1000KB" />
<!-- Keep one backup file -->
<param name="MaxBackupIndex" value="4" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n" />
</layout>
</appender>