`

多线程时间记录logger类

阅读更多

  在近期工作中遇到个性能测试的打印的问题,由于log4j中如果在多线程中,打印的无规律性(哪个线程先到就先打印),在多个线程中会出现的问题是,在action-service-dao 层模式中,如果想查看单个线程在action-service-dao 三层之间的消化时间,是很难查到的,因为它们是无规律打印的。为了解决这个问题,可以利用ThreadLocal 这个线程变量类,关于这个类的使用已经很广泛了,在Spring中事务处理,hibernate的session处理等,这个类的功能分析,可查看ThreadLocal源码分析 。其实在struts2中,已经使用了这个功能用于记录action 的各模块的性能统计了。我也只是在它的基础上修改一些,当然基本大部分是copy 源码的。。

  现在来看看实现的效果:

 

2010-05-10 18:06:16,359  INFO (TimeLoggerStack:155) - [0ms] - util.timelogger.LoggerTest (:12)
  [0ms] - test1
    [0ms] - test2 (util.timelogger.LoggerTest:35)
  [0ms] - util.timelogger.LoggerTest
    [0ms] - test2 (util.timelogger.LoggerTest:35)

 

 测试类:

package util.timelogger;

import util.timelogger.TimerLoggerStack.ProfilingBlock;

/**
 * 测试
 * @author zhxing
 *
 */
public class LoggerTest {

	public static void main(String[] args) {
		TimerLoggerStack.setActive(true);
		TimerLoggerStack.push(LoggerTest.class);
		test1();
		TimerLoggerStack.pop(LoggerTest.class);
	}

	public static void test1() {
		// System.out.println(Thread.currentThread().getStackTrace()[1].getLineNumber());
		TimerLoggerStack.push("test1");
		test2();
		TimerLoggerStack.pop("test1");
		
		TimerLoggerStack.profile(LoggerTest.class, new ProfilingBlock() {

			@Override
			public Object doProfiling() {
				test2();
				return null;
			}
		
		});
	}

	public static void test2() {
		TimerLoggerStack.push("test2",LoggerTest.class);
		TimerLoggerStack.pop("test2");
	}

}

 

代码的实现很简单,上面也说了,主要是应用了回调模式和ThreadLocal 类的功能。有兴趣的可查看下面的代码。

分享到:
评论

相关推荐

    多线程的日志记录.rar

    在多线程编程中,日志记录是一项至关重要的任务,它可以帮助开发者跟踪程序运行状态,定位问题,以及在系统出现故障时提供诊断信息。本文将深入探讨如何在多线程环境中有效地实现日志记录。 首先,我们需要理解多...

    QLogger:适用于Qt应用程序的多线程记录器

    QLogger是一款专为Qt应用程序设计的多线程日志记录工具,它允许开发者在应用程序运行过程中记录各种信息,包括错误、警告、调试消息等。QLogger的出现解决了单线程日志系统可能遇到的问题,如日志写入的同步问题,...

    labview操作logger,日志记录

    7. **日志库和工具**:有一些社区开发的LabVIEW工具,如LVLogger,提供了更高级的日志功能,如网络日志、多线程日志支持和日志过滤。 8. **数据可视化**:日志数据可以进一步用于生成图表或报表,以便于分析。...

    C++ 并发多线程日志处理

    在C++编程中,多线程日志处理是一项重要的任务,尤其在高并发环境中,能够有效地记录、管理和分析系统运行时的信息。C++11引入了标准库中的`<thread>`,使得多线程编程变得更加方便,同时也为日志处理带来了新的挑战...

    我的多线程小游戏

    《我的多线程小游戏》是一款基于Java编程语言开发的小型游戏,主要利用多线程技术实现,旨在提供一个趣味性的编程实践案例,帮助开发者更好地理解和掌握多线程编程。在这个游戏中,玩家需扮演角色,通过点击屏幕上的...

    日志记录类

    本文将详细探讨C++实现的多线程日志记录类及其重要特性。 标题“日志记录类”暗示我们关注的是一个专为C++设计的日志系统,该系统可能具有记录不同级别日志的能力,例如调试(DEBUG)、信息(INFO)、警告(WARNING...

    高性能C 通用日志组件VC-Logger.zip

    支持多线程同时发送写日志请求 使用单独线程在后台写日志,不影响工作线程的正常执行 采用批处理方式批量记录日志 *** 使用方法 *** 方法一:(静态加载 Logger DLL) -------...

    多线程知乎用户爬虫,基于python3.zip

    在这个项目中,开发者可能利用了Python的多线程技术来提高爬虫的效率,以便在短时间内获取大量知乎用户的数据。 【描述】中提到的"python"表明这个项目是用Python编写的。Python在爬虫领域有广泛的应用,因为它拥有...

    Logger_C#_

    在多线程环境下,同步机制如`lock`关键字或`Monitor`类可能被用来确保在读写日志文件时不会出现数据冲突。同时,异常处理机制如`try-catch-finally`块能捕获并记录潜在的运行时错误,提供更稳定的日志服务。 总的来...

    logger:NSARA竞赛记录应用程序

    此应用的核心功能可能是实时捕获、存储和分析比赛过程中的各种数据,例如参赛者表现、成绩、时间记录等。在这款应用中,Python编程语言被选用作为主要开发工具,这表明其后端逻辑可能由Python编写,利用Python的强大...

    pretty-env-logger:漂亮,易于使用的Rust记录器

    这对于理解和调试复杂的多线程应用尤其有用。此外,库会自动根据终端是否支持颜色来调整输出,确保在不同环境下都能有良好的用户体验。 `pretty-env-logger`的安装非常简单,只需要在`Cargo.toml`文件中添加依赖,...

    开源项目-buguang01-Logger.zip

    6. 多线程/进程支持:在多线程或多进程环境中,确保日志信息的正确性和顺序。 7. 自定义处理器:允许开发者扩展和定制自己的日志处理器,以适应特定需求。 “Logger-master”可能是这个项目的源代码主分支,这表明...

    好用小巧的日志类源码

    本文将详细解析标题为“好用小巧的日志类源码”的资源,该日志类具备多线程支持,适用于VB.NET编程环境。 首先,日志类在VB.NET中的实现通常是通过自定义类来完成的,这个类会包含一系列的方法,如记录信息、警告、...

    Basic logger for C and C++ projects.zip

    - 多线程支持:确保日志记录线程安全,可能需要使用互斥锁或其他同步机制。 5. **使用示例** - 初始化日志器:设置日志文件路径和日志级别。 - 记录日志:调用日志器的写入方法,传入日志级别和信息。 - 关闭...

    delete_logger.rar

    8. **多线程**:如果程序需要在后台运行或不影响用户界面,可能采用了多线程技术,其中一部分线程负责定时任务,另一部分处理用户交互。 9. **日志记录**:由于文件名为“delete_logger”,可能表明程序具有日志...

    VC_Logger VC_LoggerDll

    a) 支持多线程同时发送写日志请求 b) 使用单独线程在后台写日志,不影响工作线程的正常执行 c) 采用批处理方式批量记录日志 Usage: 方法一:(静态加载 Logger DLL) ----------------------------------...

    PyPI 官网下载 | sca_logger_python-2.2.2.tar.gz

    - **自定义日志格式**:`sca_logger_python`可能支持自定义日志格式,包括时间戳、进程ID、线程ID、日志级别等信息,以提高日志的可读性和分析性。 - **多处理器**:可能提供多种处理器,如文件处理器、SMTP邮件...

    c++记录日志到文件里面

    7. **多线程支持**:如果程序是多线程的,需要考虑线程安全问题。可以使用互斥锁(`std::mutex`)来确保同一时间只有一个线程能写入日志文件。 8. **日志旋转**:为了防止日志文件过大,可以实现日志文件的自动轮换...

    Python库 | edw.logger-1.12-py2-none-any.whl

    6. 多线程/多进程支持:在并发环境下也能正确地记录日志。 7. 日志切割:根据时间或其他条件自动分割日志文件,防止单个文件过大。 8. 日志旋转:定期或基于大小限制来保存旧的日志文件,保持日志存储的合理性。 ...

Global site tag (gtag.js) - Google Analytics