2007年11月21日水曜日

JavaWebStartのログの取り方

Windowsだとコントロールパネルにある「Javaコントロールパネル」の設定の「詳細」タブで、「デバッグ」カテゴリの以下にチェックを入れる。
  • トレースを有効にする。
  • ロギングを有効にする。
これで「${home}/Application Data/Sun/Java/Deployment/log/」直下に「javaws0000.[log|trace]」の組み合わせがふたつ出力されるようになる。片方がJavaWSのログで、残りはApplicationのログ。拡張子logはxml形式の詳細なもの、拡張子traceはメッセージのみの簡易なもの。ただ、Defaultではログレベルの設定で全てが出力さえるわけではない。JavaWSが処理する詳細のログが欲しいときは、「${home}/Application Data/Sun/Java/Deployment/」直下の「deployment.properties」に「deployment.trace.level=all」の設定を追加する必要がある。 例えば、JavaWSの起動をかけた直後からApplicationの起動までの間のどこにどれくらいの時間がかかっているか?を知りたければ、上記の設定を行った後で一旦logフォルダの中のlogをどこかへ移動してから対象のApplicationをJavaWSで起動する。そして、JavaWSのlog(xmlの方)から「log/record/date」「log/record/millis」と「log/record/message」を抽出すればOKOK!抽出するのが面倒なら以下のxslをxmlの先頭にかましてIEで開けば簡単なHTMLで見ることができます。
<?xml version="1.0" encoding="shift_jis"?>
<!--
1.javaws*.logのファイルをjavaws*.xmlに変更。
2.新たにできたjava*.xmlのlog要素より上を以下に置換。
<?xml version="1.0" encoding="shift_jis" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="./javaws-profile.xsl"?>
3.新たにできたjava*.xmlをIEなどxsltしてくれるブラウザで開く。
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="html" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>
<xsl:variable name="start-date" select="number(//record[1]/date/text())"/>
<xsl:variable name="start-millis" select="number(//record[1]/millis/text())"/>
<xsl:variable name="end-millis" select="number(//record[last()]/millis/text())"/>
<xsl:template match="/">
<html lang="ja">
<head>
<xsl:element name="meta">
  <xsl:attribute name="http-equiv">Content-Style-Type</xsl:attribute>
  <xsl:attribute name="content">text/css</xsl:attribute>
</xsl:element>
<title>JavaWS Profile Report.</title>
</head>
<body><xsl:apply-templates select="log"/></body></html>
</xsl:template>

<xsl:template match="log">
<xsl:element name="h1">JavaWS Profile Report.</xsl:element>
<xsl:element name="p">total:<xsl:value-of select="$end-millis - $start-millis"/></xsl:element>
<xsl:element name="p">
  <xsl:attribute name="style">font-weight:bold;font-size:1.3em;</xsl:attribute>
</xsl:element>
<xsl:element name="table">
  <xsl:attribute name="border">1</xsl:attribute>
  <xsl:attribute name="width">100%</xsl:attribute>
  <xsl:element name="tr">
    <xsl:element name="th">date</xsl:element>
    <xsl:element name="th">millis</xsl:element>
    <xsl:element name="th">message</xsl:element>
  </xsl:element>
  <xsl:apply-templates select="record"/>
</xsl:element>
</xsl:template>

<xsl:template match="record">
<xsl:element name="tr">
  <xsl:element name="td"><xsl:value-of select="./date/text()"/></xsl:element>
  <xsl:element name="td"><xsl:variable name="time" select="number(./millis/text()) - number($start-millis)"/><xsl:value-of select="$time"/></xsl:element>
  <xsl:element name="td"><xsl:element name="pre"><xsl:value-of select="./message"/></xsl:element></xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

Blogged with Flock

コメントを投稿