用Java Instrumentation在类加载时添加记录

在分析程序出错的原因时,了解它当时的状态将是非常有用的。在许多情况下,我们可以通过堆栈追踪实现此目的,但这些信息经常都是不可用的,或者您需要的可能是程序在出错时处理数据的相关信息。

传统做法是使用 log4j 和 Java Logging API 等记录框架,然后再通过人工来编写和维护所需的记录语句。这种操作非常单调乏味且容易出错,一般适合自动实现。Java 5 添加的 Java Instrumentation 机制允许您通过提供 "Java 代理" 来检查和修改加载的类字节代码。

本文将展示如何实现这种 Java 代理,它借助标准 Java Logging API 透明地对类中所有方法添加入口和出口记录。以 Hello World 为例:

public class HelloWorld {

            public static void main(String args[]) {

                       System.out.println("Hello World");

           }

}

下面是添加了入口和出口记录语句的同一个用例:

import java.util.Arrays;

import java.util.logging.Level;

import java.util.logging.Logger;

public class LoggingHelloWorld {

        final static Logger _log = Logger.getLogger(LoggingHelloWorld.class.getName());

         public static void main(String args[]) {

        if (_log.isLoggable(Level.INFO)) {

        _log.info("> main(args=" + Arrays.asList(args) + ")");

        }

        System.out.println("Hello World");

        if (_log.isLoggable(Level.INFO)) {

         _log.info("< main()");

          }

     }

}

时间: 2016-03-05

用Java Instrumentation在类加载时添加记录的相关文章

如何禁止打印文件时添加记录信息

打印机作为常见的办公工具,为我们的工作带来了不少便利.但是我们在使用打印机的过程中可能从来没有注意过每每打印一篇文章,日志文件就会加入一条记录,而这个记录从来不会有用,但却占用了很多空间.那么如何禁止打印文件时添加记录信息呢? 首先按快捷键win+r,打开运行对话框. 在运行中输入regedit   在注册表编辑器中打开hkey local machine/system/currentcontrol   在currentcontrolset中找到control,打开它   在control中找到

看实例学VFP:向数据表中添加记录时自动生成编号

本例在"看实例学VFP:向数据表中添加记录并验证输入数据是否合法"的基础上进行了改进,实现了在添加记录时不仅能够完成对输入数据的校验,还具有自动生成编号的功能.自动生成编号的相关代码加在表单的init事件及"添加"按钮的click中,在表单第一次启动或添加完记录后都会调用此段代码,实现自动生成编号的功能.运行界面如下: 本例用到了"数据1"数据库中的"网站信息表",关于该数据库的情况已经在看实例学VFP:示例数据库一文中给出,

mfc 里用addnew()向mysql表中添加记录时有时在前面,有时在后面,求解啊

问题描述 mfc 里用addnew()向mysql表中添加记录时有时在前面,有时在后面,求解啊 mfc 里用addnew()向mysql表中添加记录时有时在前面,有时在后面,求解啊!! 解决方案 直接用SQL语句控制记录. 解决方案二: 文档 数独求解"> 解决方案三: 我是这样插入的

java 添加记录到数据库

java 添加记录到数据库教程 这应该是一款基本的java入门教程哦,他是先连接数据库,如果数据库连接成功后,再尝试把用户提交的数据添加到数据表哦. import java.sql.*; public class register {     string logname,realname,password,email,phone,address;     string message;     connection con;     statement sql;     resultset r

java-基于Java的购物网站店家添加图片如何实现

问题描述 基于Java的购物网站店家添加图片如何实现 是直接在数据库中存图片,还是通过其他方式存图片,本人Java菜鸟,求大神赐教 解决方案 一般采用的方式一般有两种: 数据库里面存储图片的路径.varchar型,action里面是String. 上传文件结束时把路径+文件名提交保存到数据库. 另一种是图片本身存到数据库. 需要考虑数据库容量问题,不建议用. 但是我用第一种方式成功之后有一些问题,我在添加商品之后刷新商品页面,新插入的商品找不到图片,但是上传文件位置和路径都没有问题,后来重启服务

利用ISAPI实现向数据库中添加记录

本文介绍了用HTML(HypertextMakeupLanguage)编写界面.编写ISAPI(InternetServerApplicationProgrammingInterface)交互程序以实现向用MicrosoftSQLServer建立的数据库中添加记录的方法. 1.前言 MicrosoftSQLServer是一种可伸缩的.高性能的关系型数据库管理系统(RDBMS),它专为分布式客户机-服务器计算环境而设计.它的内置数据复制功能.强大的管理工具和开放式的系统体系结构为发布信息提供了一个

看实例学VFP:同时向两个表中添加记录

本文利用看实例学VFP:利用多个表中的字段创建新表这个实例中的知识来制作一个文本式录入表单的简单示例,通过这个表单可以同时向"数据1"数据库中的"网站信息表"和"附加信息表"这两个表中添加记录,并且对录入的数据可以选择"保存"."添加"或"撤消".这两个表的索引字段分别是"编号"和"网站编号",这两个字段的内容是完全相同的,只是分别处于两个表中,并

看实例学VFP:向数据表中添加记录并验证输入数据是否合法

本例的执行过程大致是在添加记录时首先使用empty()函数对接收数据文本框作是否为空的判断,使用locate做记录指针定位(关于vfp表记录指针定位和数据排序请参考:记录指针定位和数据排序),并判断是否和表中已有的数据重复.通过以上方式完成数据校验,如果满足非空.非重复的条件,则使用append blank命令在表中添加一条空白记录,然后使用replace命令将该记录的对应字段的值修改成表单上对应文本框内输入的值.程序运行时如下图: 本例用到了"数据1"数据库中的"网站信息表

EF 自关联表主键自增情况下,不能添加记录的问题,有谁解决过?

问题描述 EF 自关联表主键自增情况下,不能添加记录的问题,有谁解决过? 如题,我的系统中因为一个特定原因,需要一张自关联表(thisTable)来简化逻辑, 该表主键是自增的,结果发现无法添加记录, 错误消息:无法确定"db.thisTable"关系的主体端.添加的多个实体可能主键相同. 请问,有人解决过这个问题吗? 解决方案 自己解决了,顺便分享给大家: 在EF的设定里,自关联的表主键外键,都不能为空(为空就会破坏数据的完整性), 这在两表关联时没问题,但在自关联就有一个悖论,那就