当前位置: 首页 > 面试题库 >

如何在日志中识别线程或类似线程?

经正祥
2023-03-14
问题内容

我正在使用Go语言,回声框架进行开发。

我正在设计一个记录器,我想将线程ID的等价物记录到日志中,但是我不知道一个好的方法。

例如,如果同时进行多次访问的登录处理,则它在一侧成功,而在一侧失败。通过查看失败的日志无法确定。

经过检查,Go语言中的goroutine的id存在,但我不应该得到它,最初据说goroutine在同一线程中是不同的。

如何识别线程?还是有包装将它们放入日志中?

如果我用错了表达,对不起,因为英语不是我的母语。谢谢。


问题答案:

Go例程中没有等效于GoLang中的线程ID。

您可能要做的是创建一个上下文并为其添加一个唯一的ID(最好是请求ID)。让所有函数也接受一个上下文。让记录器库获取上下文并打印唯一ID。通过以这种方式使用上下文,您甚至可以共享日志信息



 类似资料:
  • 线程标识类型是std::thread::id,可以通过两种方式进行检索。第一种,可以通过调用std::thread对象的成员函数get_id()来直接获取。如果std::thread对象没有与任何执行线程相关联,get_id()将返回std::thread::type默认构造值,这个值表示“没有线程”。第二种,当前线程中调用std::this_thread::get_id()(这个函数定义在<th

  • 问题内容: 我有一个带有log4j的Struts应用程序,用于显示有关应用程序的信息。 格式化日志输出的模式如下: 我需要在日志中显示 线程ID 而不是 线程名称 。显示线程名称的转换字符为%t。我没有在log4j文档中看到获得它的方法。 谁能帮我?? 问题答案: 这是可能的,但并不像仅使用一些预配置的模式那样容易。 Log4j 1.X和Log4j 2.x没有用于打印线程ID的任何预配置模式,但是

  • 在Logback中,可以使用setLevel()方法更改记录器的日志级别。但是在Logback中,由于记录器是单例的,setLevel()方法的调用会影响到使用相同记录器的所有其他线程。 现在我有一个在web应用程序中使用的类,如下所示: 在Spring ApplicationConfig.xml中: 我想记录从insertOne方法调用insertRecord。另一方面,在insertMany方

  • 我有一个多线程Java应用程序,每个线程都是一个扩展基类的类。其中一个线程偶尔会给基类中的一个方法大量机器生成的数据,而其他线程只给出少量的人类类型数据。我想在比机器数据更高的日志级别上记录这些人类类型的消息,但是由于基类是所有线程的一部分,我无法在代码中区分出来。 一种解决方案是通知扩展类中的基类在不同的级别上登录,但是我必须将这些知识硬编码到应用程序中,这很难看。 我想做的是通过我的logba

  • 问题内容: 在登录内部时,如何获取处理程序正在处理的http请求的或任何其他唯一ID ? 在Java中,当Tomcat或其他容器处理多个HTTP请求时,线程ID有助于跟踪相应HTTP请求处理的所有日志消息。 等价于什么?给定使用库开发的Rest API ,如何在处理程序处理中跟踪特定http请求的所有日志语句? 问题答案: 根据https://groups.google.com/forum/#!s

  • 问题内容: 我写一个简单的应用程序,它涉及三个线程: ,和。 是 生成* 并馈给的生成器类。 * 消耗了 计算平均值。我的号码已经使用该饲料用。用途吃起来。 问题是:: 如果平均值超过中的1E5 ,我想表示停止产生数字。我有一个在需要被打开。我该如何实现? PS:该代码将永久运行,而无需在控制台上打印任何内容,我至今仍未弄清原因!! 问题答案: 您可以使用并将它传递给两个线程,原子类型是可访问的,