1.一文分析DPDK跟踪库tracepoint源码
2.如何调试跟踪AndroidFramework源代码
3.基于图注意力单元的图像改进SiamFC++的单目标追踪系统
4.ARToolkitARToolkit介绍
5.指标源码是什么
6.å¦ä½å¨ASP.NET Core 6ä¸ä½¿ç¨è·è¸ªçå¬å¨
一文分析DPDK跟踪库tracepoint源码
在DPDK跟踪库tracepoint的源码分析中,关键流程包括rte_eal_trace_thread_remote_launch以及初始化过程。跟踪初始化流程由`eal_trace_init`执行,源码挂载`tracepoint`,图像其核心在于`RTE_TRACE_POINT_DEFINE`宏与`RTE_TRACE_POINT_REGISTER`定义的跟踪转换。rte_eal_trace_thread_remote_launch函数定义于`lib\librte_eal\include\rte_eal_trace.h`文件,源码易语言qt源码是图像远程线程操作的函数。
接着观察`__rte_trace_point_emit_header_generic`函数,跟踪通过分析其流程可以看出其主要分为两部分:获取内存区域与填充函数指针、源码arg指针等数据。图像在调用这个宏时,跟踪内存区域将用于存储时间戳及标志位等信息,源码然后填入由宏提供的图像数据类型,包括函数指针、跟踪arg指针、源码bits的slave_id和int型rc变量。这些操作在`rte_eal_remote_launch`函数中执行时完成,DPDK的tracepoint功能最终实现。
为了深入理解这些细节,建议参考相关资源,如《全网讲的最好的DPDK,由简到精,系统学习,资深老师带你聊透DPDK 为什么说实现CM的挑战不在硬件而在软件》等材料,并且实际操作学习DPDK的tracepoint实现方法,通过实践深化对源码的理解。
参考资料链接:t.csdn.cn/NhKEJ
如何调试跟踪AndroidFramework源代码
为了在Eclipse中调试跟踪Android Framework的unix源码安装源代码,需要遵循一系列步骤。以下内容改写并优化了原文的条理和质量,确保语义不变,并保留了原文的条目编号。
1. **环境配置**:
- 确保安装了JDK、Eclipse、Android SDK和ADT插件。
- 针对跟踪调试Android源码,需要有可访问的Android源码编译环境,可以是虚拟机、网络共享或Linux本地环境。
- 确保Android源码是编译过的Eng版本。
2. **基本设置**:
- 将Android源码路径下的`.classpath`文件复制到源码根目录。
- 修改Eclipse的`eclipse.ini`文件以增加Java堆大小。
3. **创建工程**:
- 在Eclipse中创建一个新的Java项目。
- 输入项目名称,选择Android源码路径作为项目位置。
- 完成创建,并注意排除或添加项目中错误的配置包。
4. **调试环境配置**:
- 在Eclipse中设置远程Java应用程序的调试配置。
- 填写名称、项目选择为Android源码项目、端口填写正确的端口号。
- 应用并保存配置。
5. **调试过程**:
- 启动模拟器或连接真机,确保设备在DDMS视图中可见。vippdf查看源码
- 在目标代码处设置断点。
- 在设备上触发调试进程(如锁屏解锁操作)。
- 使用Eclipse的调试工具来控制程序执行和查看变量值。
6. **错误处理**:
- 如果导入的工程出现错误,可以通过以下方式处理:
- 方法一:编译自己的SDK,替换默认SDK中的`android.jar`。
- 方法二:将编译后的`framework`的`classes.jar`文件添加到Eclipse工程的`build path`中。
7. **注意事项**:
- 本文档适用于Windows、Mac OS和Linux系统。
- 可以调试Java代码,但不能调试Framework中的C/C++代码。
- 确保Android源码已编译,并且是Eng模式。
- 调试前需在目标代码处设置断点,并知道其执行的进程。
通过这些步骤,开发者可以在Eclipse中有效地调试Android Framework的源代码。
基于图注意力单元的改进SiamFC++的单目标追踪系统
随着计算机视觉技术的进步,单目标追踪(SOT)在多个实际应用中得到广泛应用,如智能监控、交通管理和无人驾驶。然而,目标外观变化、遮挡和光照变化等因素给SOT任务带来挑战。基于深度学习的方法在SOT领域取得了显著进展。
SiamFC是free bsd源码一种基于孪生网络的方法,通过编码目标和背景为两个特征图,计算它们之间的相似度实现目标跟踪。但SiamFC在处理复杂场景和目标变化时仍存在局限性,如目标遮挡和光照变化。因此,研究者们提出了许多改进方法,其中图注意力单元(Graph Attention Unit)作为一种有效的注意力机制,能够在图结构数据上学习目标的相关性和重要性,提高SiamFC模型对目标的关注度,从而提高单目标追踪的准确性和鲁棒性。
本研究旨在基于图注意力单元的改进SiamFC++的单目标追踪系统。通过引入图注意力单元,我们设计了一种新的网络结构,将图注意力单元嵌入到SiamFC模型中,提高模型对目标的关注度和区分度。同时,我们还探索了不同的注意力机制和损失函数,以进一步提高模型的性能。本研究的意义主要体现在以下几个方面:提高SiamFC模型在复杂场景和目标变化下的追踪性能;推动深度学习在SOT领域的应用;为实际应用提供更准确、鲁棒的单目标追踪解决方案。
近年来,计算机视觉引起了学界的广泛关注。单目标追踪作为计算机视觉的重要研究方向之一,在研究过程中除了追求准确性之外还要保证实时性,以提高现实适用性。本章针对实时单目标追踪问题,合肥网站源码利用双边加权最小二乘模糊支持向量机,提出了基于多特征融合的实时追踪算法FSCFI4]。实验结果表明,与已有的高性能单目标追踪算法相比,所提FSCF算法在形变、快速运动、运动模糊等多个方面均表现出了更优的追踪性能。
图像相似度计算是计算机视觉和图像分析中最基本的任务之一,在诸多视觉任务中发挥着重要作用。双通道网络的核心思想在于将孪生网络的双分支合并在一起。孪生网络和双通道网络的网络架构图如图所示。与孪生网络相比,双通道网络共同处理了两个patch,提供了更大的灵活性。通过实验,Zagoruyko等证明了双通道网络不仅训练速度更快,而且模型精度更高。
Graph_Attention_Union.py是一个名为Graph_Attention_Union的神经网络模型类,它继承自nn.Module和ABC类,并包含了一些卷积层和线性变换层。该模型类的初始化函数接受两个参数:in_channel和out_channel,分别表示输入通道数和输出通道数。模型的前向传播函数forward接受两个输入zf和xf,分别表示搜索区域节点和目标模板节点。整个模型的目的是实现图注意力机制,用于处理图结构数据的特征提取和聚合。
SiamFC_plus.py是一个用于目标跟踪的Siamese网络的实现,它包含了三个主要的模块:特征提取模块、Siamese网络架构和损失函数。特征提取模块是一个简单的卷积神经网络,它包含了三个卷积层,用于从输入图像中提取特征。Siamese网络架构包含了一个特征提取模块和两个头部(Classification head和Regression head)。损失函数定义了Siamese网络的训练损失,包含了两个部分:分类损失和回归损失。
双通道网络和孪生网络最大的区别在于,孪生网络是在最后的全连接层中才将两张的相关神经元关联在一起,而双通道网络则是从最初就将输入的两张联系在一起。与孪生网络相比,双通道网络共同处理了两个patch,提供了更大的灵活性。本节将双通道网络引入到单目标追踪领域中,提出了一个融合双通道网络和SiamFC的实时单目标追踪算法SiamFC_plus。
网络的前向传播过程是按照从前往后的顺序,从输入层开始经由隐藏层到达输出层,逐层计算出各个网络层的激活值,最后得到网络输出值。网络一共有L=9层,结合表6-1可知其中包括了1个输入层,5个卷积层,2个池化层,1个全连接层。第1层是输入层,输入目标模板图像z和搜索区域图像x,以z为滤波器,在每个颜色通道上对x做互相关操作,其输出为:
完成前向传播过程后,开始进行网络的反向传播。反向传播过程是按照从后往前的顺序,从输出层开始经由隐藏层到达输入层,逐层计算出每个网络层的误差项,进而计算各层网络参数的梯度,最后根据梯度值更新各层网络参数。
以往的跟踪器都通过模板分支和搜索分支之间的互相关实现相似性学习。原算法的作者认为这种方式存在以下缺点:以往跟踪器一般是以目标中点为中心取m*m大小的区域作为模板,这会导致提取到部分背景信息或者丢失部分目标信息。本文只提取目标所在bbox区域作为模板帧。以往跟踪器互相关是将提取到的模板特征在搜索区域上做全局搜索,无法适应旋转、姿态变化、遮挡等情况。
GAM:提出图注意力模块(Graph Attention Module),有效将目标信息从模板特征传递至搜索特征。SiamGAT:在SiamCAR基础上做了改进,设计 target-aware 的选择机制以适应不同目标的大小和长宽比变化。整体网络结构如图,特征提取使用GoogleNet,头部和SiamFC++一样。
下图完整源码&数据集&环境部署视频教程&自定义UI界面。参考博客《基于图注意力单元的改进SiamFC++的单目标追踪系统》。
[1] 杨晓伟, 黄滢婷. 基于多特征融合的实时单目标追踪算法[J]. 华南理工大学学报(自然科学版).,(6).DOI:./j.issn.-X. .
[2] Tsung-Yi,Lin, Priyal,Goyal, Ross,Girshick,等. Focal loss for dense object detection.[J].IEEE Transactions on Pattern Analysis & Machine Intelligence.,(Spec).DOI:./TPAMI.. .
[3] Mingming Lv, Li Wang, Yuanlong Hou,等.Mean Shift Tracker With Grey Prediction for Visual Object Tracking[J]. Canadian journal of electrical & computer engineering.,(4).-.DOI:./CJECE.. .
[4] Bourque, Alexandra E., Bedwani, Phane, Carrier, Jean-Francois,等. Particle Filter-Based Target Tracking Algorithm for Magnetic Resonance-Guided Respiratory Compensation: Robustness and Accuracy Assessment[J].International Journal of Radiation Oncology, Biology, Physics.,(2).-.DOI:./j.ijrobp... .
[5] Liu, Huaping, Yu, Yuanlong, Sun, Fuchun,等. Visual-Tactile Fusion for Object Recognition[J].IEEE transactions on automation science and engineering: a publication of the IEEE Robotics and Automation Society.,(2).-.DOI:./TASE.. .
[6] Zhang, Le, Suganthan, Ponnuthurai Nagaratnam. Robust visual tracking via co-trained Kernelized correlation filters[J].Pattern Recognition: The Journal of the Pattern Recognition Society..-.
[7] Baochang Zhang, Zhigang Li, Xianbin Cao,等.Output Constraint Transfer for Kernelized Correlation Filter in Tracking[J].IEEE Transactions on Systems, Man, and Cybernetics: Systems.,(4).-.DOI:./TSMC.. .
[8] Yoon, Kuk-Jin, Yoon, Ju Hong, Yang, Ming-Hsuan. Interacting Multiview Tracker[J].IEEE Transactions on Pattern Analysis & Machine Intelligence.,(5).
[9] Hare, Sam, Golodetz, Stuart, Saffari, Amir,等. Struck: Structured Output Tracking with Kernels[J].IEEE Transactions on Pattern Analysis & Machine Intelligence.,().
[] Henriques, Joao F., Caseiro, Rui, Martins, Pedro,等. High-Speed Tracking with Kernelized Correlation Filters[J].IEEE Transactions on Pattern Analysis and Machine Intelligence.,(3).-.DOI:./TPAMI.. .
ARToolkitARToolkit介绍
ARToolKit是一个C/C++语言编写的库,用于简化增强现实应用程序的开发。增强现实技术将虚拟图像叠加在现实世界画面之上,具有广泛的应用潜力,尤其是在工业和理论研究领域。 开发AR程序的难点在于实时地将虚拟图像与用户视野对齐,并与真实世界中的物体精确匹配。ARToolKit通过使用计算机图像技术计算摄像机与标记卡之间的相对位置,使得开发者能够将虚拟对象精确覆盖到标记卡上。该库提供了快速准确的标记跟踪功能,大大加速了AR程序的开发速度。 ARToolKit不仅提供跟踪库和完整源代码,还允许开发者根据不同的平台调整接口,甚至可以使用自己的跟踪算法。这意味着开发者可以根据需求灵活调整库的功能。 ARToolKit目前支持以下操作系统:SGI IRIX
PC Linux
Mac OS X
PC Windows(包括//NT//XP)
尽管当前版本的ARToolKit在不同操作系统上实现了不同的函数集,但所有版本都遵循相同的开发包框架,利用了相关平台上的硬件特性以实现高效运行。对于Video see-through AR(实时视频覆盖虚拟图像)和标准的see-through AR(需要配备头部现实设备的视图)两种模式,ARToolKit提供了全面的支持,满足不同应用场景的需求。指标源码是什么
指标源码指的是反映某种指标数据变化的源代码。 详细解释如下: 一、指标源码的定义 指标源码是一种特定的编程代码,用于跟踪和记录某些关键业务指标的数据变化。这些指标通常涉及到企业的运营情况、用户行为、市场趋势等,对于企业的决策和策略调整具有重要意义。指标源码能够帮助企业实现数据的实时跟踪和监控,从而为企业的运营提供数据支持。 二、指标源码的作用 指标源码的主要作用在于数据的采集和处理。通过编写特定的源代码,企业可以实时收集各种业务数据,包括用户访问量、转化率、销售额等,然后将这些数据进行分析和处理,得出关键的业务指标数据。这些数据可以用于评估企业的运营状况,发现潜在的问题,以及优化企业的运营策略。 三、指标源码的应用场景 指标源码广泛应用于各种场景,特别是在数据分析、数据挖掘、机器学习等领域。例如,在电商平台上,指标源码可以用于跟踪用户的购买行为、浏览习惯等,从而帮助电商平台优化商品推荐和营销策略。在社交媒体上,指标源码可以用于监测用户活跃度、内容质量等,从而提升用户体验和内容质量。此外,指标源码还可以用于企业的风险管理、市场预测等方面。 总之,指标源码是一种重要的编程代码,用于跟踪和记录关键业务指标的数据变化。它能够帮助企业实现数据的实时跟踪和监控,为企业的决策和策略调整提供数据支持。在现代企业中,熟练掌握指标源码的编写和使用,对于提升企业的数据分析和运营水平具有重要意义。å¦ä½å¨ASP.NET Core 6ä¸ä½¿ç¨è·è¸ªçå¬å¨
å½ä½¿ç¨ASP.NET Core 6æ建çåºç¨ç¨åºæ¶ï¼ä½ å¯è½ç»å¸¸æ³ä½¿ç¨è·è¸ªåè®°å½æ¥çæ§ä½ çåºç¨ç¨åºçæ§è½åè¯æé误ãä½ ä¹å¯ä»¥å¨ç产ç¯å¢ä¸ä½¿ç¨è·è¸ªæ¥è¡¡éä½ çåºç¨ç¨åºå¨è¿è¡æ¶ç表ç°ãè¿ç¯æç« è®¨è®ºäºæ们å¦ä½å¨ASP.NET Core 6ä¸ä½¿ç¨è¿½è¸ªãæ们å°ç 究å¦ä½ä½¿ç¨è·è¸ªçå¬å¨æ¥æ¶éè·è¸ªä¿¡æ¯ï¼å¹¶ä½¿ç¨ILoggerå°è·è¸ªè¾åºå¼å¯¼å°äºä»¶æ¥å¿ä¸ã
è¦ä½¿ç¨æ¬ææä¾ç代ç 示ä¾ï¼ä½ çç³»ç»ä¸åºè¯¥å®è£ æVisual Studio ãå¦æä½ è¿æ²¡æå¯æ¬ï¼ä½ å¯ä»¥å¨è¿éä¸è½½Visual Studio ã
å¨Visual Studio ä¸å建ä¸ä¸ªASP.NET Core Web API项ç®é¦å ï¼è®©æ们å¨Visual Studio ä¸å建ä¸ä¸ªASP.NET Core项ç®ãæç §è¿äºæ¥éª¤å°å¨Visual Studio ä¸å建ä¸ä¸ªæ°çASP.NET Core 6 Web API项ç®ã
å¯å¨Visual Studio IDEã
ç¹å» "å建æ°é¡¹ç®"ã
å¨ "å建æ°é¡¹ç® "çªå£ï¼ä»æ¾ç¤ºç模æ¿å表ä¸éæ© "ASP.NET Core Web API"ã
ç¹å» "ä¸ä¸æ¥"ã
å¨ "é ç½®ä½ çæ°é¡¹ç® "çªå£ä¸ï¼æå®æ°é¡¹ç®çå称åä½ç½®ã
æ ¹æ®ä½ çå好ï¼å¯ä»¥éæ©å¾é "å°è§£å³æ¹æ¡å项ç®æ¾å¨åä¸ç®å½ä¸ "å¤éæ¡ã
ç¹å» "ä¸ä¸æ¥"ã
å¨æ¥ä¸æ¥æ¾ç¤ºç "éå ä¿¡æ¯ "çªå£ä¸ï¼ç¡®ä¿å¾é "使ç¨æ§å¶å¨... "çå¤éæ¡ï¼å 为æ们å¨è¿ä¸ªä¾åä¸ä¸ä¼ä½¿ç¨æå°çAPIãå° "éªè¯ç±»å "ä¿ç为 "æ "ï¼é»è®¤ï¼ã
ç¡®ä¿ "å¯ç¨Docker"ã"为HTTPSé ç½® "å "å¯ç¨å¼æ¾APIæ¯æ "çå¤éæ¡ä¸è¢«éä¸ï¼å 为æ们ä¸ä¼å¨è¿é使ç¨ä»»ä½è¿äºåè½ã
ç¹å»å建ã
æ们å°ä½¿ç¨è¿ä¸ªASP.NET Core 6 Web API项ç®ï¼å¨æ¬æçåç»é¨å使ç¨è·è¸ªçå¬å¨ã
ä»ä¹æ¯è·è¸ªï¼ä¸è¿½è¸ªä¸»è¦äºä»¶çäºä»¶æ¥å¿ç¸æ¯ï¼è¿½è¸ªå¯ä»¥æ´å ¨é¢å°äºè§£è¿è¡ä¸çåºç¨ç¨åºåå ¶ç»ä»¶ãæ¥å¿ç±ç»æåæéç»æåçæ¶é´æ³æ°æ®ç»æï¼æ¾ç¤ºäºä½ çåºç¨ç¨åºä¸åççäºä»¶çè®°å½ã追踪æä¾äºå¯¹å个请æ±ä»¥åå®å¦ä½è¢«å¤ççæ´å¤å¯è§æ§ã
System.Diagnosticså½å空é´å å«TraceåDebugç±»ãè·è¸ªç±»å¨ç产ç¯å¢ä¸ä½¿ç¨ï¼èè°è¯ç±»å¨å¼åæ¶ä½¿ç¨ã
追踪é常å æ¬ä»¥ä¸ä¸ä¸ªé¶æ®µã
å·¥å ·åãæ们ç¼åå¿ è¦ç代ç æ¥æè·ç¸å ³ä¿¡æ¯
追踪ãæ们æè·è¸ªä¿¡æ¯åå°æå®çç®æ ï¼å³äºä»¶æ¥å¿ãææ¬æ件ãæ°æ®åºè¡¨çã
åæãæ们åæä»è·è¸ªä¸æ¶éå°çä¿¡æ¯ï¼ä»¥ç¡®å®åºç¨ç¨åºä¸çç¶é¢ã
ä»ä¹æ¯è·è¸ªçå¬å¨ï¼ä¸ºä»ä¹éè¦å®ä»¬ï¼è·è¸ªçå¬å¨æ¶éè·è¸ªä¿¡æ¯ï¼åå¨å®ä»¬ï¼å¹¶å°å®ä»¬å¼å¯¼å°ä¸ä¸ªéå½çç®æ ï¼å¦ææ¬æ件ã.NETæä¾äºå ç§è·è¸ªçå¬å¨ï¼å æ¬ä»¥ä¸å ç§ã
ConsoleTraceListener - å°è·è¸ªä¿¡æ¯åéå°æ§å¶å°çªå£ã
DefaultTraceListener - å°è·è¸ªä¿¡æ¯åéå°æ åè°è¯è¾åºã
DelimitedListTraceListener - å°è·è¸ªè¾åºä»¥éå®çæ ¼å¼åéå°æµãæµä½å®¶æææ¬ä½å®¶ã
EventLogTraceListener - åéè·è¸ªä¿¡æ¯å°äºä»¶æ¥å¿ã
TextWriterTraceListener - åéè·è¸ªä¿¡æ¯å°ä¸ä¸ªææ¬æ件ã
XmlWriterTraceListener - å°è·è¸ªä¿¡æ¯è½¬æ¢ä¸ºXMLã
System.Diagnostics.DebugåSystem.Diagnostics.Traceç±»å¯ä»¥åè·è¸ªçå¬å¨åéæ¶æ¯ï¼èçå¬å¨åå°æ¶æ¯åéå°éå½çç®æ ã
å¨ASP.NET Core 6ä¸ä½¿ç¨é ç½®æ件å建ä¸ä¸ªè·è¸ªçå¬å¨ä½ å¯ä»¥éè¿ä½¿ç¨é ç½®æ件æç¼åèªå®ä¹ä»£ç æ¥å建ä¸ä¸ªè·è¸ªçå¬å¨ãä¸é¢æ¾ç¤ºç代ç çæ说æäºå¦ä½ä½¿ç¨ä½ çåºç¨ç¨åºé ç½®æ件å建ä¸ä¸ªè·è¸ªçå¬å¨ã
<configuration>æææ·»å å°çå¬å¨éåä¸ççå¬å¨é½ä¼æ¶å°è·è¸ªè¾åºãç¶èï¼ä½ å¯ä»¥ä½¿ç¨ä¸ä¸ªçå¬å¨èä¸æå®æ·»å å°çå¬å¨éåä¸ãå¨è¿ç§æ åµä¸ï¼ä½ å¨çå¬å¨ä¸ä½¿ç¨WriteæWriteLineæ¹æ³åéè¾åºã
ä¸é¢ç代ç 说æäºä¸ä¸ªçå¬å¨ï¼å®æ²¡æ被添å å°çå¬å¨éåä¸ï¼ä½ä»ç¶è½å¤å°è·è¸ªä¿¡æ¯åéå°è¾åºçªå£ãæ件æä»»ä½é¢å é ç½®çè¾åºã
TextWriterTraceListenermyFirstListener=newå¨ASP.NET Core 6ä¸å建ä¸ä¸ªèªå®ä¹è·è¸ªçå¬å¨å¨å¤§å¤æ°æ åµä¸ï¼.NET 6é»è®¤é带çè·è¸ªçå¬å¨å°æ»¡è¶³æ¨çè¦æ±ãç¶èï¼å¦æä½ æ³æä½ çè·è¸ªä¿¡æ¯è¾åºå°ä¸åçç®çå°ï¼ä½ å¯ä»¥å®ç°ä½ èªå·±çè·è¸ªçå¬å¨ã
è¦å»ºç«ä¸ä¸ªèªå®ä¹çè·è¸ªçå¬å¨ï¼ä½ åºè¯¥å建ä¸ä¸ªæ©å±TraceListeneræ½è±¡ç±»çç±»ãå¨TraceListenerç±»ä¸æå 个èæåæ½è±¡çæ¹æ³ãä½ è³å°åºè¯¥å®ç°WriteåWriteLineæ¹æ³ãè³å°ï¼ä½ çèªå®ä¹è·è¸ªçå¬å¨åºè¯¥çèµ·æ¥åè¿æ ·ã
publicclassCustomTraceListener:TraceListeneræ以ï¼ä½ çèªå®ä¹è·è¸ªçå¬å¨ç±»å¿ é¡»æä¸ä¸ªåæ°æé å¨åWriteåWriteLineæ¹æ³ã
ä½ è¿éè¦ä¸ä¸ªILoggerå®ä¾æ¥ä»£è¡¨è®°å½å¨ï¼ä¸ä¸ªè®°å½å¨å·¥åæ¥å建记å½å¨ï¼ä»¥åä¸ä¸ªStringBuilderæ¥åå¨è·è¸ªæ¶æ¯ï¼ç¶ååå°å®ä»¬åéå°æ¥å¿ç®æ ã
privatereadonlyILoggerFactory_loggerFactory;ä½ å¯ä»¥å©ç¨ä¾èµæ³¨å ¥çä¼å¿ï¼å¨æé å½æ°ä¸æ³¨å ¥ILoggerFactoryçä¸ä¸ªå®ä¾ï¼ç¶å使ç¨è¯¥å®ä¾æ¥å建ILoggerçä¸ä¸ªå®ä¾ã
publicCustomTraceListener(ILoggerFactoryloggerFactory)è¿éæ¯WriteåWriteLineæ¹æ³çä¸ä¸ªæå°å®ç°ã
publicoverridevoidWrite(string?message,string?category)ASP.NET Core 6ä¸å®æ´çèªå®ä¹è·è¸ªçå¬å¨ç¤ºä¾ä¸é¢æ¯æ们对èªå®ä¹è·è¸ªçå¬å¨çæå°å®ç°çå®æ´æºä»£ç ï¼ä¾æ¨åèã
usingSystem.Collections.Concurrent;å¨Program.csæ件ä¸æ³¨åèªå®ä¹è·è¸ªçå¬å¨è¦ä½¿ç¨èªå®ä¹è·è¸ªçå¬å¨ï¼ä½ åºè¯¥ä½¿ç¨ä»¥ä¸ä»£ç å¨çå¬å¨éåä¸æ³¨åå®ã
varloggerFactory=app.Services.GetRequiredService<ILoggerFactory>();å 为æ们çèªå®ä¹è·è¸ªçå¬å¨å·²ç»è¢«æ·»å å°çå¬å¨éåä¸ï¼å®å°æè·ææç±è¿è¡æ¶äº§ççè·è¸ªæ¶æ¯ï¼å¹¶å°è¾åºåéå°æ们çè®°å½å¨ãå®è¿å°åéæ们å¨åºç¨ç¨åºä¸æç¡®åéçä»»ä½è·è¸ªæ¶æ¯ï¼å°±åæ们å¨åé¢çmyFirstListenerä¾åä¸åçé£æ ·ï¼ã
å æ¤ï¼ä»»ä½æ·»å å°çå¬å¨éåççå¬å¨é½å¯ä»¥æè·ç±è¿è¡æ¶äº§ççè·è¸ªä¿¡æ¯ï¼ä»¥åå¨åºç¨ç¨åºä¸æç¡®åéçä»»ä½è·è¸ªä¿¡æ¯ãç¶èï¼å¦æä¸ä¸ªè·è¸ªçå¬å¨æ²¡æ被添å å°éåä¸ï¼å®åªè½åéåºç¨ç¨åºä¸æç¡®åéçè·è¸ªæ¶æ¯ãå®ä¸ä¼æè·ä»»ä½ç±è¿è¡æ¶äº§ççè·è¸ªæ¶æ¯ã
å½ä½¿ç¨èªå®ä¹è·è¸ªçå¬å¨æ¶ï¼ä½ å¿ é¡»è®°ä½å ³éæå·æ°è·è¸ªçå¬å¨ï¼ä»¥ç¡®ä¿è¾åºç¼å²åºè¢«æ¸ 空ãä½ å¯ä»¥å©ç¨StringBuilderCacheç±»æ¥ä¼åä½ ä½¿ç¨StringBuilderç代ç ï¼å¨CustomTraceListenerç±»ï¼ã