`

记一个log辅助组件(ObjDumper4J)

 
阅读更多

在java开发中,日志输出是最有效的系统调试及排错手段之一。但是,在实际开发过程中,对于一些复杂类型的对象,想在日志输出其详细内容却不容易。今天在 http://code.google.com/p/objdumper4j/ 上发现一个组件,可能有助于改变这种状况。

该组件名叫 ObjDumper4J,官方介绍及使用方法如下:
=================================

 

 

Dumps or inspects any objects and converts to readable format string. This library consists of one file only.

-sample
--------------------------------------------
   import static tetz42.util.ObjDumper4j.*;
         :
     Logger.debug( dumper("The result object:\n", theResult) );
     Logger.debug( inspecter("foo") );
--------------------------------------------

Dump

There are two dump method, 'dump' and 'dumper'.
'dump' method converts parameters to readable format String.
'dumper' method creates an object to dump the parameters. When 'toString' method of the object is called, the parameters will convert to readable format String.

Both dump parameters as follows:

- Array, List, Set
--------------------------------------------
  String[]@13b8f864[
    "foo"
    "bar"
    "baz"
  ]
--------------------------------------------
- Map
--------------------------------------------
  HashMap@54bb7759{
    "key1": "value1"
    "key2": "value2"
  }
--------------------------------------------
- Bean
--------------------------------------------
   Bean@7cf1bb78{
     intField = 10
     floatField = 10.0
     strField = "10"
   }
--------------------------------------------
- mix
--------------------------------------------
   HashMap@54bb7759{
     "key1": Bean@7cf1bb78{
       intField = 10
       floatField = 10.0
       mapField = HashMap@7f2a3793{
         "key1": 100
         "key2": 10000
       }
     }
     "key2": ArrayList@50d5db23[
       "foo"
       "bar"
       "baz"
     ]
   }
--------------------------------------------
You can use 'dumper' method as follows:
--------------------------------------------
  Logger.debug( dumper("Contents of DTO = ", dto) );
--------------------------------------------
The result:
--------------------------------------------
   [DEBUG] Contents of DTO = FooDTO@13b8f864{
     id = 42
     name = "Tetz"
     sex = "male"
     jobs = ArrayList@37bd2664[
       "IT engineer"
       "Farmer"
       "Husband"
       "Farther"
     ]
   }
--------------------------------------------
The object created by 'dumper' method do nothing unless its 'toString' method is performed. Therefore, if you use wise logging product like log4j, you need not care about performance problem when you write the code like below:
--------------------------------------------
   log.debug( dumper("Result:\n", theResult) );
--------------------------------------------
instead of:
--------------------------------------------
   if( log.isDebugEnabled() ) {
     log.debug( dumper("Result:\n", theResult) );
   }
--------------------------------------------
Because log4j does not perform 'toString' method unless the log is output.


Inspect

There are two inspect method, 'inspect' and 'inspecter'.
Both convert parameters as follows:

-sample
--------------------------------------------
  System.out.println( inspecter("foo") );
--------------------------------------------
The result:
--------------------------------------------
   String@18cc6{
     value = char[]@7a187814[
       f
       o
       o
     ]
     offset = 0
     count = 3
     hash = 101574
     serialVersionUID = -6849794470754667710
     serialPersistentFields = ObjectStreamField[]@314c194d[ ]
     CASE_INSENSITIVE_ORDER = CaseInsensitiveComparator@23394894{
       serialVersionUID = 8575799808933029326
     }
   }
--------------------------------------------


Algorithm

You can choose five algorithms against reference cycles.

- superRapid
--------------------------------------------
     // Very fast. Error will occur if the parameter is a bean that has a reference to itself.
     Logger.debug( dumper(dto).superRapid() );
--------------------------------------------
- rapid
--------------------------------------------
     // Fast. Depends on the parameter's 'hashCode' or 'equals' method, it might not act properly.
     Logger.debug( dumper(dto).rapid() );
--------------------------------------------
- normal
--------------------------------------------
     // Normal. Depends on the parameter's 'hashCode' method, it might not act properly.
     Logger.debug( dumper(dto).normal() );
--------------------------------------------
- safe
--------------------------------------------
     // Safe.
     Logger.debug( dumper(dto) );
--------------------------------------------
- superSafe
--------------------------------------------
     // Very safe. Error won't occur even if the parameter is a List, Set or Map that has a reference to itself.
     Logger.debug( dumper(list).superSafe() );
--------------------------------------------

 

 

 

==================================

从例子中可以看出,用法很简单,输出的内容也非常详细。准备在项目中试试。

 

 

 

分享到:
评论

相关推荐

    老生常谈Log4j和Log4j2的区别(推荐)

    Log4j只需要引入一个JAR包,即log4j.jar,而Log4j2则需要引入两个核心JAR包,即log4j-core.jar和log4j-api.jar。大家可以发现,Log4j和Log4j2的包路径是不同的,Apache为了区分,包路径都更新了。 文件渲染 Log4j...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...

    log4j + slf4j-api + slf4j-log4j12

    **log4j**:Log4j是Apache组织开发的一个开源日志框架,广泛应用于各种Java项目中。它提供了丰富的日志级别(如DEBUG, INFO, WARN, ERROR, FATAL)和灵活的日志配置,允许我们将日志输出到控制台、文件、数据库等...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    本文将详细探讨如何通过SLF4J接口来使用Log4j进行日志记录,并展示一个测试代码实例。 **SLF4J简介** SLF4J是一个抽象层,为各种日志框架提供了统一的API,如Logback、Log4j等。它的主要优点在于可以让你在不修改...

    log4j日志组件

    **日志组件Log4j详解** 日志组件在软件开发中扮演着至关重要的角色,它帮助开发者记录程序运行过程中的信息、错误和调试细节。Log4j是Apache组织提供的一款开源的日志记录工具,广泛应用于Java平台。Log4j的设计...

    Log4j2简介及与Log4j效率对比

    ### Log4j2简介 Log4j2是Apache软件基金会推出的日志框架,它是Log4j 1.x的重构版本,旨在提供更为高效且灵活的日志解决方案。...对于寻求高性能日志解决方案的应用开发者来说,Log4j2无疑是一个值得考虑的选择。

    log4j-api-2.12.4.ja和log4j-core-2.12.4.jar

    配置Log4j通常通过一个XML或JSON格式的配置文件完成,例如`log4j2.xml`或`log4j2.json`,这个文件定义了日志的输出级别、目的地(如控制台、文件、数据库等)以及格式。 总的来说,Log4j 2是Java开发中不可或缺的...

    logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库

    针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...

    log4j-2.18.0

    近期,一个名为“log4j2”的严重安全漏洞引发了广泛关注,它影响了所有log4j2版本,从2.0开始直到2.18.0版本之前。这个漏洞,通常被称为“Log4Shell”,因其潜在的危害性被业界高度重视,可能允许攻击者远程执行任意...

    log4j2.xml记录日志到到数据库

    Log4j2主要包括以下几个组件: 1. **配置文件**:如`log4j2.xml`,这是Log4j2的配置中心,定义了日志记录的策略、级别、输出目标等。 2. **日志记录器(Logger)**:负责收集和处理日志事件。 3. **日志级别(Level...

    apache-log4j-2.17.0 核心jar包

    Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...

    SSM整合中的Log4j日志的配置详情

    Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM 整合中的 Log4j 配置详情,帮助...

    log4j记录压缩日记

    1. **Log4j简介**:Log4j是一个广泛使用的Java日志库,提供强大的控制日志输出的能力,支持多种输出格式,如控制台、文件、数据库等。它允许开发者动态地调整日志级别,以便在开发、测试和生产环境中灵活控制日志的...

    log4j-2.11.2的jar包和日志门面slf4j的jar包

    使用这两个库时,通常需要一个配置文件(如`log4j2.xml`或`log4j2.json`)来定义日志行为,包括日志输出级别(如DEBUG、INFO、WARN、ERROR)、输出目的地(控制台、文件、数据库等)、以及布局格式(如PatternLayout...

    tomcat8更换log4j记录日志

    Log4j是Apache软件基金会的一个开源项目,它为Java应用程序提供了一种灵活的日志记录方案。Log4j的优点包括可配置性、性能高效以及支持多种输出格式,如控制台、文件、数据库等。在Tomcat中,Log4j可以用来代替默认...

    log4j-api-2.17.1.jar和log4j-core-2.17.1.jar

    总的来说,log4j-api-2.17.1.jar和log4j-core-2.17.1.jar是Log4j2的核心组件,它们共同构建了一个强大且可扩展的日志框架。开发者应熟悉这两个库的职责和交互方式,以便充分利用Log4j2的功能,同时确保系统的安全性...

    log4j.jar各个版本

    apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...

    log4j-API-最新稳定版本log4j-1.2.17

    标题提及的是"log4j-API-最新稳定版本log4j-1.2.17",这表明我们关注的是日志框架Log4j的一个特定版本,即1.2.17。Log4j是Apache软件基金会开发的一个用于Java应用程序的日志记录工具,它提供了灵活的日志记录功能,...

    Log4j2结合Slf4j配置使用

    Log4j2 是一个功能强大且广泛使用的日志记录工具,它提供了灵活的日志记录机制和高性能的日志记录能力。Slf4j 则是一个简单的日志记录门面,提供了统一的日志记录接口。今天,我们将讨论如何将 Log4j2 结合 Slf4j ...

    Log4j2、Fastjson、Log4j的BurpSuite插件亲测有效

    Log4j、Log4j2和Fastjson的安全性问题在过去曾引起广泛关注,例如Log4j2的CVE-2021-44228(也被称为Log4Shell漏洞),这是一个远程代码执行漏洞,影响了许多使用Log4j2的系统。这个插件可能就是为了检测和利用这些...

Global site tag (gtag.js) - Google Analytics