Altibase.jdbc.driver.logging

## Class LoggingProxy

- java.lang.Object
- - Altibase.jdbc.driver.logging.LoggingProxy

All Implemented Interfaces:
  java.lang.reflect.InvocationHandler

Direct Known Subclasses:
  ConnectionLoggingProxy, StatementLoggingProxy

    public class LoggingProxy
    extends java.lang.Object
    implements java.lang.reflect.InvocationHandler

JDBC 인터페이스를 hooking하여 로깅기능을 수행하는 프락시 클래스
이 클래스는 JDBC API를 hooking하여 로그관련 동작을 일부 추가한다. 몇몇 메소드는 하위클래스에서 overrideing 된다.

Author:
  yjpark

### Field Summary

Fields
`static java.lang.String` `JDBC_LOGGER_ASYNCFETCH`
`static java.lang.String` `JDBC_LOGGER_CM`
`static java.lang.String` `JDBC_LOGGER_DEFAULT`
`static java.lang.String` `JDBC_LOGGER_FAILOVER`
`static java.lang.String` `JDBC_LOGGER_POOL`
`static java.lang.String` `JDBC_LOGGER_ROWSET`
`static java.lang.String` `JDBC_LOGGER_XA`
`protected static java.lang.String` `METHOD_PREFIX_CLOSE`
`protected java.util.logging.Logger` `mLogger`
`protected java.lang.Object` `mTarget`
`protected java.lang.String` `mTargetName`

### Constructor Summary

Constructors
`protected` `LoggingProxy(java.lang.Object aTarget, java.lang.String aTargetName)`
`protected` `LoggingProxy(java.lang.Object aTarget, java.lang.String aTargetName, java.lang.String aLoggerName)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected java.lang.Object` `createProxyWithReturnValue(java.lang.Object aResult)` 메소드 실행결과를 이용해 필요하면 Proxy객체를 만들고 로그를 남긴다.
`protected java.lang.String` `getUniqueId()`
`java.lang.Object` `invoke(java.lang.Object aProxy, java.lang.reflect.Method aMethod, java.lang.Object[] aArgs)` JDBC API가 hooking 될때 수행되는 메소드.
`protected void` `logClose(java.lang.reflect.Method aMethod)` close 메소드를 로깅한다.
`protected void` `logReturnValue(java.lang.reflect.Method aMethod, java.lang.Object aResult)` 메소드 실행 결과값을 로그로 남긴다.
`protected void` `logSql(java.lang.reflect.Method aMethod, java.lang.Object aResult, java.lang.Object[] aArgs)` CONFIG레벨로 셋팅되었을 때 sql문을 출력한다.
`protected void` `logSqlTiming(java.lang.reflect.Method aMethod, long aStartTime)` sql문이 실행되는데 걸린 시간을 출력한다.
`protected java.lang.String` `makeArgStr(java.lang.Object[] aArgs)` 아규먼트정보를 이용해 String을 구성한다..

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### JDBC_LOGGER_DEFAULT

    public static final java.lang.String JDBC_LOGGER_DEFAULT

See Also:
  Constant Field Values

#### JDBC_LOGGER_ROWSET

    public static final java.lang.String JDBC_LOGGER_ROWSET

See Also:
  Constant Field Values

#### JDBC_LOGGER_POOL

    public static final java.lang.String JDBC_LOGGER_POOL

See Also:
  Constant Field Values

#### JDBC_LOGGER_FAILOVER

    public static final java.lang.String JDBC_LOGGER_FAILOVER

See Also:
  Constant Field Values

#### JDBC_LOGGER_CM

    public static final java.lang.String JDBC_LOGGER_CM

See Also:
  Constant Field Values

#### JDBC_LOGGER_XA

    public static final java.lang.String JDBC_LOGGER_XA

See Also:
  Constant Field Values

#### JDBC_LOGGER_ASYNCFETCH

    public static final java.lang.String JDBC_LOGGER_ASYNCFETCH

See Also:
  Constant Field Values

#### METHOD_PREFIX_CLOSE

    protected static final java.lang.String METHOD_PREFIX_CLOSE

See Also:
  Constant Field Values

#### mLogger

    protected transient java.util.logging.Logger mLogger

#### mTarget

    protected java.lang.Object mTarget

#### mTargetName

    protected java.lang.String mTargetName

### Constructor Detail

#### LoggingProxy

    protected LoggingProxy(java.lang.Object aTarget,
                           java.lang.String aTargetName)

#### LoggingProxy

    protected LoggingProxy(java.lang.Object aTarget,
                           java.lang.String aTargetName,
                           java.lang.String aLoggerName)

### Method Detail

#### invoke

    public java.lang.Object invoke(java.lang.Object aProxy,
                                   java.lang.reflect.Method aMethod,
                                   java.lang.Object[] aArgs)
                            throws java.lang.Throwable

JDBC API가 hooking 될때 수행되는 메소드.
JDBC API를 hooking해 일부 로깅 기능을 수행하고 invoke로 해당 메소드를 수행한다.

Specified by:
  `invoke` in interface `java.lang.reflect.InvocationHandler`
Throws:
  `java.lang.Throwable`

#### logSql

    protected void logSql(java.lang.reflect.Method aMethod,
                          java.lang.Object aResult,
                          java.lang.Object[] aArgs)

CONFIG레벨로 셋팅되었을 때 sql문을 출력한다.

Parameters:
  `aMethod` -
  `aResult` -
  `aArgs` -

#### logSqlTiming

    protected void logSqlTiming(java.lang.reflect.Method aMethod,
                                long aStartTime)

sql문이 실행되는데 걸린 시간을 출력한다.

Parameters:
  `aMethod` -
  `aStartTime` -

#### createProxyWithReturnValue

    protected java.lang.Object createProxyWithReturnValue(java.lang.Object aResult)

메소드 실행결과를 이용해 필요하면 Proxy객체를 만들고 로그를 남긴다.

Parameters:
  `aResult` -
Returns:

#### logReturnValue

    protected void logReturnValue(java.lang.reflect.Method aMethod,
                                  java.lang.Object aResult)

메소드 실행 결과값을 로그로 남긴다.
메소드명이 toString인 경우는 무시하고 리턴값이 있을때만 FINE레벨로 해당 Object를 출력한다.

Parameters:
  `aMethod` -
  `aResult` -

#### logClose

    protected void logClose(java.lang.reflect.Method aMethod)

close 메소드를 로깅한다.
이때 해당하는 오브젝트의 unique id를 같이 출력한다.
예를 들어 Connection이나 Statement같은 경우 session id나 stmt id를 출력하고 그 이외의 경우에는
Object의 hashcode를 출력한다.

Parameters:
  `aMethod` -

#### makeArgStr

    protected java.lang.String makeArgStr(java.lang.Object[] aArgs)

아규먼트정보를 이용해 String을 구성한다..
이때 아규먼트가 String인 경우에는 "를 추가하여 아래와 같은 형태가 되며 CONFIG레벨로 sql을 출력할때 사용된다.
(1, "aaa", "bbb", 222)

Parameters:
  `aArgs` -
Returns:

#### getUniqueId

    protected java.lang.String getUniqueId()