Пример #1
0
  /**
   * 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();
  }
Пример #2
0
  /**
   * 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;
  }
Пример #3
0
 @Override
 protected Long initialValue() {
   Thread thread = Thread.currentThread();
   Long tid = ThreadUtil.getThreadId(thread);
   return tid;
 }