/** * Java5 を利用した場合にスレッドダンプを取得します。<br> * * @param info {@link ThreadInfo}オブジェクト * @param elements {@link StackTraceElement}オブジェクトの配列 * @return */ private static String getThreadDumpJava5(ThreadInfo info, StackTraceElement[] elements) { StringBuilder sb = getThreadInfoBuffer(info); sb.append(NEW_LINE); sb.append(ThreadUtil.getAllStackTrace(elements)); sb.append(NEW_LINE); return sb.toString(); }
/** * Javelinログとして、ファイルに出力する。 javelin.download.maxを超える場合には、分割して送信する。 * * @param jvnLogBuilder ライター * @param tree {@link CallTree}オブジェクト * @param node ノード。 * @param endNode ログに出力する CallTree の最後のノード(このノードまで出力される) * @param callback JavelinCallback。 * @param jvnFileFullPath jvnファイルのフルパス。 * @param jvnFileName jvnファイル名。 * @param telegramId 電文 ID。 * @param itemName アイテム名。 * @return 引き続きノードを出力する場合は <code>true</code> 、ノード出力を終了する場合は <code>false</code> */ public static boolean generateJavelinFileImpl( final StringBuilder jvnLogBuilder, final CallTree tree, final CallTreeNode node, final CallTreeNode endNode, JavelinLogCallback callback, String jvnFileName, String jvnFileFullPath, final long telegramId, final String itemName) { JavelinConfig config = new JavelinConfig(); if (jvnLogBuilder.length() > config.getJvnDownloadMax()) { flushBuffer( jvnLogBuilder, jvnFileName, jvnFileFullPath, callback, config, telegramId, itemName); } if (node == null) { StackTraceElement[] stacktraces = ThreadUtil.getCurrentStackTrace(); String stackTraceStr = "(JavelinFileGenerator#generateJavelinFileImpl) node is NULL.\n"; stackTraceStr += ThreadUtil.getStackTrace(stacktraces, stacktraces.length); SystemLogger.getInstance().warn(stackTraceStr); return true; } // ファイルに1メッセージを書き込む。 if (node.getInvocation() != null) { String jvnCallMessage = createLogMessage(tree, node); if (jvnCallMessage != null) { jvnLogBuilder.append(jvnCallMessage); } } List<CallTreeNode> children = node.getChildren(); boolean continuePrint = true; for (int index = 0; index < children.size(); index++) { CallTreeNode child = children.get(index); continuePrint = generateJavelinFileImpl( jvnLogBuilder, tree, child, endNode, callback, jvnFileName, jvnFileFullPath, telegramId, itemName); if (continuePrint == false || child == endNode) { continuePrint = false; break; } } // Throwログを書き込む。 if (node.getThrowable() != null) { writeThrowLog(jvnLogBuilder, tree, node); } // Eventログを書き込む。 CommonEvent[] eventList = node.getEventList(); if (eventList != null) { for (CommonEvent event : eventList) { writeEventLog(jvnLogBuilder, tree, node, event); } } String jvnReturnMessage = ""; if (node.getEndTime() >= 0) { if (node.isFieldAccess()) { jvnReturnMessage = JavelinLogMaker.createJavelinLog(ID_FIELD_WRITE, node.getEndTime(), tree, node); } else { jvnReturnMessage = JavelinLogMaker.createJavelinLog(ID_RETURN, node.getEndTime(), tree, node); } } // ファイルに1メッセージを書き込む。 if (jvnReturnMessage != null) { jvnLogBuilder.append(jvnReturnMessage); } return continuePrint; }
@Override protected Long initialValue() { Thread thread = Thread.currentThread(); Long tid = ThreadUtil.getThreadId(thread); return tid; }