자바를 이용해서 웹 서비스를 하든 어플리케이션을 하든, 보통 일반 개발자들이 어느 순서로 클래스 로딩이 되고 어떠한 작동을 하는지 알기 힘든 부분이 있다. 
로그만 추적하면, 클래스 로딩의 순서를 알게 되고 어떻게 진행되는지 도움이 많이 된다.


1. log4j 설정
debug로 print 한다. 
<logger name="com" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="general"/>
</logger>

<logger name="org" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="general"/>
</logger>
<root>
<level value="DEBUG"/>
<appender-ref ref="STDOUT"/>
</root>




2. 클래스 로딩된 순서를 verbose하게 프린트한다

-verbose:class 
Display information about each class loaded. 


[Loaded com.TestExcelReader from file:/D:/source/web/WEB-INF/classes/]
[Loaded sun.misc.URLClassPath$JarLoader$1 from shared objects file]
[Loaded sun.misc.FileURLMapper from shared objects file]
[Loaded java.util.zip.ZipConstants from shared objects file]
[Loaded java.util.zip.ZipFile from shared objects file]
[Loaded java.util.jar.JarFile from shared objects file]
[Loaded sun.misc.JavaUtilJarAccess from shared objects file]
[Loaded java.util.jar.JavaUtilJarAccessImpl from shared objects file]
[Loaded sun.misc.JarIndex from shared objects file]
[Loaded sun.misc.ExtensionDependency from shared objects file]
[Loaded java.util.zip.ZipEntry from shared objects file]
[Loaded org.apache.poi.ss.usermodel.Workbook from file:/D:/source/web/WEB-INF/lib/poi-3.5-FINAL.jar]




3. -Djava.security.debug=all   
상황에 따라서는 java.security.debug를 출력하면 security manager 관련된 정보를 볼 필요도 있다.


scl: 
jar: beginEntry META-INF/MANIFEST.MF
jar: done with meta!
jar: nothing to verify!
scl:  getPermissions ProtectionDomain  (file:/D:/nhn/hangame_castest/web/WEB-INF/lib/poi-3.5-FINAL.jar <no signer certificates>)
 sun.misc.Launcher$AppClassLoader@19821f
 <no principals>
 java.security.Permissions@19ee1ac (
 (java.io.FilePermission \D:\nhn\hangame_castest\web\WEB-INF\lib\poi-3.5-FINAL.jar read)
 (java.lang.RuntimePermission exitVM)
)

Posted by 김용환 '김용환'

댓글을 달아 주세요