メランジ雑記帳

2009年11月30日

sunのvirtualboxを使ってXPの環境を残す

カテゴリー: 仮想化 — admin @ 12:55 PM

fedora 11(64ビット)のKVM(Kernel-based Virtual Machine)のGUIまわりには少しがっかりした。元々はサーバ用を狙った環境のようだ。

Linuxは4-5年前から4Gの壁を越えてしまったので、64ビットを数年間から利用している。大変快適である。

それでOSに付属しているKVMでWindows系のOSを動かそうと思っていろいろと工作してみたのだが、弊社の利用には合わない。そこで以前から試したことがある、sunのvirtualboxを利用してみた。

最初は、NTFSのパーティションを新しいハードディスクにddでコピーしてみた。(ddはシーケンシャルなファイルまたはデバイスからコピーするUNIXコマンド:

IBMのJCLから来たのではという話であるが、私はdisk to disk と覚えている)。

NTFSパーティションをvmdk形式(VMWareのディスク形式)で登録して利用した。これだと動作が重たかった。ブートのMBRを指定すると、ブルースクリーンが出て、うれしいやら困ったやら。また、起動する際にはルートの権限で行った。(これは、そのパーティションに対する権限の問題であとで解決する予定なのでスキップした)。

再度XPのOSをアップグレード状態でインストールすると、一応OKになったが、だんだん遅くなっていったのでおかしい。とうとう、パーティションを認識しなくなってしまった。他のPCでも確かめたが、認識しない。実はこの会社のSATAを収容する装置(これをESATAとして利用)は長いこと(8時間?)使っていると接触が悪くなるのか、認識しなくなってしまった。

実質の転送レートは30M-40MB/sec程度であったので、それほど悪くはなかったのであるが。

また、雑誌などでは、新規インストールが扱われているのだが、実際は古い環境の保守という側面が現状の利用者の需要としてはかなりあると思う。つまり古い環境をディスクごと新しい環境で再生させるというのが今回の目的である。われわれだけの問題であれば、新しいコンパイラーでコンパイルできるようにすべきであるのだが(最近は説得力がなくなったか?)。お客様が関係するとそうもいかない。もともとのソフトが大きなソフトウエアさんが巨額で作成したものだったりすると、つい遠慮して言えなくなる。こちらの生死にかかわるようなこと(正しく動作するプログラムを作成すること)については、主張するけれども。

「ディスクごと」ということであるが、雑誌ではVHD(Virtual Hard Disk)という形式はホストがWindowsでなければ使えないようなことが書いてあったが、上のようにインストールしているときにVHDの表記をどこかのダイアログでみたので(ということは一回戻ったということ)、VHDにdisk2vhdという、マイクロソフトのフリーソフトを利用してネットワークドライブにとってみた。混沌の館風になってしまうが、翌日終了しているのかと思ってPCをみたら、そのソフトが死んでいた(応答がありません)。進行状況は30%程度。これは本当の話(このコンピュータからサーバまでは100Mの低速イーサーだったのがまずかったか?)。またはスクリーンセイバーのせい?そこでUSBのHDDに直接出力した。私の場合は1ドライブでCとDのパーティションを切っていたので、その2つを1つのVHDにした。これを作成するのに2ー3時間(120G)。コピーをするのに40分かかった。

さてこの状態でsunのvirtual boxを機動するとKVM状態では動作できないという。KVMをアンインストールしたのだが、まだ、modproveで見ると、kvm-intelというのがいるので、それをメモリーから除去。

一応動作するが、やはりXPからXPへのOSのアップグレード状態でのインストールが必要であった。また、3日以内にライセンスを取得というが、金曜なので、土曜、日曜で月曜ということになるが、月曜は忙しくなるので…

まあそれでもめげずにXPからXPへのOSのアップグレード状態でのインストールをしたら、大変良い環境になった。その後、VBoxGuestAdditionsというのをインストールするとマウスカーソルがゲストとホストの間で行き来する度に、いちいちキーを二度押したり(ゲストに入るとき)、ホストキーを押す(ゲストから出て行くとき)必要がなくなった。VHDは内部ではseekに変換しているだけのようで、それなりに速い。

後日、別のマシーンにO君のXP環境を移すことにしたのだが、ホストをWindows 7(64ビットにしてみた。最初は苦労してWindows 7に付属のvirtual PCを使ったのだが、いろいろと苦労したあげく、VHDのサイズが127Gを越える、ATAのIDEとしては認められないということで断念した。やはりsunのvirtualboxにしてみる。これだと問題なく動作した。さらにvboxGuestAdditionsもインストールすると、大変すばらしい環境になった。Linuxとどちらがということはまだ計測はしていない。XPのマシーンを仮想化する意味は、

(1) マイクロソフトの古いコンパイラー(Visual C++)でメモリーの大きさをチェックしているものがあり、それを使用するように指定されている会社がある。

(2) また、昔のInstallShieldでも同様なことをしているものがある。

(3) どちらにしても新しいマシーン用のドライバはしばらくすると供給されなくなるので、古いマシーンと心中するしかない。

という理由からである。お客さまも苦労しているはずである。

仮想化がどの程度までできているのかを調べるため、サウンドが正しくホストのそれを使えるのかを調べた。最初は、スピーカーを探したらUSB経由で音のデータを拾うタイプのものが転がっていたので、それでためした。まず、ホストOSのほうは音が出た。(設定->サウンド->犬の声など)。しかし、ゲストのXPにiTunesをインストールしようとしたが、まず、なにか起動させようというたびにWindows Installerが何かをインストールしようとしている。googleで探したが簡単にはでてこない。それで、イベントログをみたら、Adobe のacrobat(7.0!)更新をかけているようで悪さをしている(XPからXPにアップグレードインストールした際に破損させてしまったか?)。実際にはSP3からSP2へのダウングレードにあたるので不明。acrobatをアンインストールした。一応OK。しかし、iTunesをインストールしようとすると、古いiTunesをアンインストールしてくださいといわれる。それでそのとおりにすると、netservice云々というディレクトリがどうのということで、アンインストールできない。そこで、強制アンインストールを行うマイクロソフトのフリーソフト(Officeの強化ツール)でiTunesをアンインストールした。それから再度インストールするとOK。しかし、MSNの動画にいっても音が鳴らない。動画はかなりよく動作はしている。しかたがないので、サウンドの関係の設定をホストとvirtualboxとxpの3者でいろいろとためした。それでもならないので、ヘッドフォーンをフロントパネルの緑色のコネクターに接続すると聞こえてきた。成功!ネットワークもOKで、ドメインにログインできた。virtualboxとは関係がないが、落語のCDをHDDに入れようとしたが、認識しない。おかしい、これでOSを入れたのであるが。昔IDEのCDはインストール時かその後かが使えなかったことがあったが、まだ同じバグが残っているのだろうか(Fedora7,8-10あたり)。

そこでヘッドホーンをあたまからはずしたら、それでも聞こえている。つまりUSBスピーカーでもOKであった。なにが起きたかは不明。接触の問題か?

次回はUSBのICカードを試そう。

2009年11月19日

authenticodeとactive X

カテゴリー: プログラミング — admin @ 5:47 PM

昔XPで動作していたActive X(自社サーバからダウンロードして使うようになっている)がVistaでは動作しないとの報告を受け、調査した。

原因はinfファイルがないことであった。これはWindows CEなどのコントロールパネルでも必要であった(2年ほど前の仕事)。

いろいろとセキュリティー関係は強化しているので、最新情報をチェックしないといけない。

コードサインは

signtool signwizard

コマンドでCABに署名した。CAはopensslで自前で立てている。ルートの下にコード署名用の証明書(+キー)を作成してある。

最悪の場合にはactive XのCABをダウンロードしてCABを展開し、regsrv32(??)コマンドでこの種のものはインストールできる。

新しいファイルだけを書庫に入れるコマンド

カテゴリー: LINUX, unix tool — admin @ 5:39 PM

tar cvf newcss.tar –after-date=’27 Oct 2009′ *.css

のようにする。(空白が入っているのでシングルクオートでくくった)

あるファイルよりも新しいものは

tar cvf newcss.tar –after-date=./’nanntokafile.txt *.css

のように/または.で始まるDateを指定すればそれはファイルとみなされてそれを参照点として考える。

http://www.gnu.org/software/tar/manual/html_section/after.html#SEC109を参考にした。

2009年11月18日

PDFで縦線の太さが微妙に違う

カテゴリー: fop — admin @ 5:27 PM

PDFで縦線がジャギーになっている部分を解析してもらったら、コードは正しいということであった。

bad_vertical_line

そこで、原因を調べたらAcrobat Readerの環境設定で「レンダリング」の項目に「細い線を拡張」というものがあり、そこにチェックが入っていた。これをはずすとOKで

good_vertical_lineとなった。めでたしめでたし。

2009年11月15日

cssで入力欄でない部分を立体的に

カテゴリー: css — admin @ 7:11 AM

こういうことはwebデザインの常識なのかもしれなが、一応メモとして残すことにした。

単なる文字列を入力欄のように配置した場合のように立体的に見せたいときに

<span class=”ridge”>123</span>

でcssでは

.ridge {  height: 1.2em; border-style: ridge; border-width: 2px;  }

とすると、Internet Explorerでは見た目がよいのだが、FireFoxでは

2次元的に見えて困っていた。上記を

.ridge {  height: 1.2em; border-style: solid; border-width: 2px;

border-color: #999999 #eeeeee #f8f8f8 #aaaaaa;}

にしてIE/firefoxでも同じように立体的に見えるようになった。

box_with_only_ridge

box_with_colorsとなったのである。

2009年11月12日

docbookで日本語

カテゴリー: DocBook — admin @ 6:38 PM

fopで日本語出るようになったら、もう少しである。

sh xmlformat.sh -d mydocbook.xsl howtouseicba.xml
fop -c /usr/share/fop/conf/fop.xconf howtouseicba.fo howtouseicba.pdf

のようなシェルスクリプトを作成する。
-c /usr/share/fop/conf/fop.xconfの部分が最近は必要になってしまった(?)

ここで、mydocbook.xslというファイルはxsltprocなどに対するドライバファイルといわれているもので

要するに変換用のXSLファイルのこと。以下のような内容になっているといいらしい。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets/fo/docbook.xsl"/>
    <xsl:param name="paper.type">A4</xsl:param>
    <xsl:param name="title.font.family">IPA Pゴシック</xsl:param>
    <xsl:param name="body.font.family">IPA P明朝</xsl:param>
    <xsl:param name="monospace.font.family">IPA明朝</xsl:param>
</xsl:stylesheet>

これは、たくさんあるXSLファイルを修正するのが大変なので、フォント名と紙のサイズだけを指定したものを優先させる。 そのほかは最初のほうの行でimportしている。 xmlformat.shはIBMのサイトからもってきたもので、http://www.ibm.com/developerworks/jp/xml/library/x-reuseinfo1/ が詳しい。このfopはPSやRTF変換もできる(-rtfスイッチで)らしいのだが、tocがどうなるのか不明。禁止していることが多いようだ。 …と書いたのであるが、その後試してみたら、Open Officeで目次は1秒程度で簡単に作成できた。 その意味で編集可能なWORD形式で提出ということも可能であるので、利用範囲はかなり広い。 今後相互参照や、索引、表や図の番号なども引き継げるのか時間があったら試そうと思う。 また、Open OfficeだとDocBookのXMLファイルをそのまま開くことができて(その種のフィルターがはじめから定義されていた)、大体はPDFのイメージに近かった。 docbooksample

2010-03-18追記:

システムディレクトリ内のファイルを修正してもいいのであれば、

/usr/share/sgml/docbook/xsl-stylesheets/fo/param.xslというファイルでsanserifやserifとなっている部分をMSPMinchoなどに修正してしまうという手もある。

以下はその一部


<xsl:param name="body.font.family">MSPMincho</xsl:param>
<xsl:param name="body.font.master">10</xsl:param>
<xsl:param name="body.font.size">
 <xsl:value-of select="$body.font.master"/><xsl:text>pt</xsl:text>
</xsl:param>
<xsl:param name="body.margin.bottom">0.5in</xsl:param>
<xsl:param name="body.margin.top">0.5in</xsl:param>
<xsl:param name="body.start.indent">
  <xsl:choose>
    <xsl:when test="$fop.extensions != 0">0pt</xsl:when>
    <xsl:when test="$passivetex.extensions != 0">0pt</xsl:when>
    <xsl:otherwise>4pc</xsl:otherwise>
  </xsl:choose>
</xsl:param>

最初の行のMSPMinchoがそれまでのseirfフォントを置き換えたもの。別ルートでserifフォントがさす実体を変更する方法もありだろう。

あとは<emphasis>でイタリックにならないという限界があったので、<emphasis role=underline>として強調した。

fopの設定(忘れてしまうので)

カテゴリー: fop — admin @ 3:25 PM

/usr/share/fop/fontsに以下のようなファイルを入れておくこと

msgothic.ttc
msmincho.ttc

ここで/usr/bin/fopスクリプトをコピーしてきて最後のrun “$@”を以下のように修正

# Let’s start
TTF=org.apache.fop.fonts.apps.TTFReader
java $TTF /usr/share/fop/fonts/msmincho.ttc -ttcname “MS PMincho” mspmincho.xml
java $TTF /usr/share/fop/fonts/msmincho.ttc -ttcname “MS Mincho” msmincho.xml
java $TTF /usr/share/fop/fonts/msgothic.ttc -ttcname “MS PGothic” mspgothic.xml
java $TTF /usr/share/fop/fonts/msgothic.ttc -ttcname “MS Gothic” msgothic.xml

これでメトリックファイルができる。

IPAのほうも以下のように最後を変更したシェルスクリプトを作成する。

# Let’s start
TTF=org.apache.fop.fonts.apps.TTFReader
java $TTF /usr/share/fonts/ipa-gothic/ipag.otf ipag.xml
java $TTF /usr/share/fonts/ipa-pmincho/ipamp.otf ipamp.xml
java $TTF /usr/share/fonts/ipa-mincho/ipam.otf ipam.xml
#java $TTF /usr/share/fonts/ipa-uigothic/ipagui.ttf ipagui.xml
java $TTF /usr/share/fonts/ipa-pgothic/ipagp.otf ipagp.xml

このxmlファイルはfopに付属のプログラムで人工的に作ったものである(メトリックという文字の大きさの情報が入っている)。
また、/usr/share/fo/conf/fop.xconfには 、これらの日本語フォントが利用できるようにありかを示す必要がある。
(元のものをセーブして編集した)。

<font metrics-file="/usr/share/fop/fonts/msmincho.xml"
 Kerning="yes" embed-url="file:///usr/share/fop/fonts/MSMINCHO.TTF">
    <font-triplet name="Mincho" style="normal" weight="normal"/>
    <font-triplet name="Mincho" style="normal" weight="bold"/>
    <font-triplet name="Mincho" style="italic" weight="normal"/>
    <font-triplet name="Mincho" style="italic" weight="bold"/>
    <font-triplet name="MS Mincho" style="normal" weight="normal"/>
    <font-triplet name="MS Mincho" style="normal" weight="bold"/>
    <font-triplet name="MS Mincho" style="italic" weight="normal"/>
    <font-triplet name="MS Mincho" style="italic" weight="bold"/>
    <font-triplet name="MSMincho" style="normal" weight="normal"/>
    <font-triplet name="MSMincho" style="normal" weight="bold"/>
    <font-triplet name="MSMincho" style="italic" weight="normal"/>
    <font-triplet name="MSMincho" style="italic" weight="bold"/>
    <font-triplet name="MSææ" style="normal" weight="normal"/>
    <font-triplet name="MSææ" style="normal" weight="bold"/>
    <font-triplet name="MSææ" style="italic" weight="normal"/>
    <font-triplet name="MSææ" style="italic" weight="bold"/>
 </font>
 <font metrics-file="/usr/share/fop/fonts/mspmincho.xml"
     kerning="yes" embed-url="file:///usr/share/fop/fonts/MSPMINCHO.TTF">
    <font-triplet name="PMincho" style="normal" weight="normal"/>
    <font-triplet name="PMincho" style="normal" weight="bold"/>
    <font-triplet name="PMincho" style="italic" weight="normal"/>
    <font-triplet name="PMincho" style="italic" weight="bold"/>
    <font-triplet name="MS-PMincho" style="normal" weight="normal"/>
    <font-triplet name="MS-PMincho" style="normal" weight="bold"/>
    <font-triplet name="MS-PMincho" style="italic" weight="normal"/>
    <font-triplet name="MS-PMincho" style="italic" weight="bold"/>
    <font-triplet name="MSPMincho" style="normal" weight="normal"/>
    <font-triplet name="MSPMincho" style="normal" weight="bold"/>
    <font-triplet name="MSPMincho" style="italic" weight="normal"/>
    <font-triplet name="MSPMincho" style="italic" weight="bold"/>
    <font-triplet name="MSPææ" style="normal" weight="normal"/>
    <font-triplet name="MSPææ" style="normal" weight="bold"/>
    <font-triplet name="MSPææ" style="italic" weight="normal"/>
    <font-triplet name="MSPææ" style="italic" weight="bold"/>
 </font>
<font metrics-file="/usr/share/fop/fonts/msgothic.xml"
  kerning="yes" embed-url="file:///usr/share/fop/fonts/MSGOTHIC.TTF">

    <font-triplet name="Gothic" style="normal" weight="normal"/>
    <font-triplet name="Gothic" style="normal" weight="bold"/>
    <font-triplet name="Gothic" style="italic" weight="normal"/>
    <font-triplet name="Gothic" style="italic" weight="bold"/>
    <font-triplet name="MS-Gothic" style="normal" weight="normal"/>
    <font-triplet name="MS-Gothic" style="normal" weight="bold"/>
    <font-triplet name="MS-Gothic" style="italic" weight="normal"/>
    <font-triplet name="MS-Gothic" style="italic" weight="bold"/>
    <font-triplet name="MSGothic" style="normal" weight="normal"/>
    <font-triplet name="MSGothic" style="normal" weight="bold"/>
    <font-triplet name="MSGothic" style="italic" weight="normal"/>
    <font-triplet name="MSGothic" style="italic" weight="bold"/>
    <font-triplet name="MSゴシック" style="normal" weight="normal"/>
    <font-triplet name="MSゴシック" style="normal" weight="bold"/>
    <font-triplet name="MSゴシック" style="italic" weight="normal"/>
    <font-triplet name="MSゴシック" style="italic" weight="bold"/>
 </font>
 <font metrics-file="/usr/share/fop/fonts/mspgothic.xml"
  kerning="yes" embed-url="file:///usr/share/fop/fonts/MSPGOTHIC.TTF">
    <font-triplet name="PGothic" style="normal" weight="normal"/>
    <font-triplet name="PGothic" style="normal" weight="bold"/>
    <font-triplet name="PGothic" style="italic" weight="normal"/>
    <font-triplet name="PGothic" style="italic" weight="bold"/>
    <font-triplet name="MS-PGothic" style="normal" weight="normal"/>
    <font-triplet name="MS-PGothic" style="normal" weight="bold"/>
    <font-triplet name="MS-PGothic" style="italic" weight="normal"/>
    <font-triplet name="MS-PGothic" style="italic" weight="bold"/>
    <font-triplet name="MSPGothic" style="normal" weight="normal"/>
    <font-triplet name="MSPGothic" style="normal" weight="bold"/>
    <font-triplet name="MSPGothic" style="italic" weight="normal"/>
    <font-triplet name="MSPGothic" style="italic" weight="bold"/>
    <font-triplet name="MSPゴシック" style="normal" weight="normal"/>
    <font-triplet name="MSPゴシック" style="normal" weight="bold"/>
    <font-triplet name="MSPゴシック" style="italic" weight="normal"/>
    <font-triplet name="MSPゴシック" style="italic" weight="bold"/>
 </font>
<font metrics-file="/usr/share/fop/fonts/msuigothic.xml"
  kerning="yes" embed-url="/usr/share/fop/fonts/MSUIGOTHIC.TTF">
    <font-triplet name="UIGothic" style="normal" weight="normal"/>
    <font-triplet name="UIGothic" style="normal" weight="bold"/>
    <font-triplet name="UIGothic" style="italic" weight="normal"/>
    <font-triplet name="UIGothic" style="italic" weight="bold"/>
    <font-triplet name="MS-UIGothic" style="normal" weight="normal"/>
    <font-triplet name="MS-UIGothic" style="normal" weight="bold"/>
    <font-triplet name="MS-UIGothic" style="italic" weight="normal"/>
    <font-triplet name="MS-UIGothic" style="italic" weight="bold"/>
    <font-triplet name="MSUIGothic" style="normal" weight="normal"/>
    <font-triplet name="MSUIGothic" style="normal" weight="bold"/>
    <font-triplet name="MSUIGothic" style="italic" weight="normal"/>
    <font-triplet name="MSUIGothic" style="italic" weight="bold"/>
    <font-triplet name="MSUIゴシック" style="normal" weight="normal"/>
    <font-triplet name="MSUIゴシック" style="normal" weight="bold"/>
    <font-triplet name="MSUIゴシック" style="italic" weight="normal"/>
    <font-triplet name="MSUIゴシック" style="italic" weight="bold"/>
 </font>

のようなものを定義しておけばいい。他のフォントについても同様。

fop -c /usr/share/fop/conf/fop/fop.xconf XXX.fo XXX.pdf

でXXX.foというfo(formatting object)をXXX.pdfに変換する。

参考:http://liosk.blog103.fc2.com/blog-entry-71.html#more

japanese_doc_with_IPAfont

2009年11月11日

fedoraのkvmを利用してみて

カテゴリー: 仮想化 — admin @ 5:33 AM

昨今、仮想化が流行している。数ヶ月前にXP/VistaでRHELを3個仮想で動かすということを協力会社の人としてみて最近のCore 2 DuoではXを利用しないモードではかなり速いということが実感できた。VMWareを使って実験をした。

そこで、一昨日と昨日に渡り最近流行りのfedora 11のkvm(Kernel virtual mode)を利用してみた。感想はAppleのもの(これもfedoraで動作する。solaris系のテストに利用したことがある)のほうが速いかなーというものであった。すこしマウスが固まることがあったが。Xenと比べるとどうなのかな?
とくに、Guest OSとしてのVistaは遅い。メモリーを1.5Gに制限したからか。全体のメモリは8Gあるので微調整してみよう。XPはまあまあである。コンソールはvncを利用しているのか?

2009年11月6日

#if DEBUGはあまり美しくない。とあるシステムでのデバッグ

カテゴリー: プログラミング — admin @ 10:40 PM

昔C journalにかいたことであるが、大きなプログラムでは

#if DEBUG

….debugXXX(“YYY”);

#endif

がいっぱい入ったコードがあると気が滅入る。

これは、マクロできちんと書けるのであって、それは以下のような形になる。

まずヘッダーファイルから

#define mylog(args) { WriteLog0(“DEBUG [%s:%d %s] “, __FILE__, __LINE__, __func__); WriteLog1 args;}

また、実際にファイルに書く部分は

void WriteLog1(char *lpMessage, …)
{
va_list               ap;

if (!logFile) {
CreateLogFile();
}
// ログメッセージ
va_start(ap, lpMessage);
vfprintf(logFile, lpMessage, ap);
va_end(ap);
// 改行
fwrite(“\r\n”, 2, 1, logFile);

// ファイルを閉じる
fclose(logFile);
logFile = NULL;
}

のような形になる。

これを呼び出す側は、

mylog((“fgets ==> %s”, buf));

のように余分な括弧が必要である。なぜかというと、CやC++のマクロでは可変個数の引数を渡すという取り決めがないからだ。それでも#ifがなくなった分、とても読みやすくなる。

しかし、括弧を余分につけることにより、それを乗り切っているわけである。これは昔Cジャーナルの翻訳を担当していたときに学んだ賢い方法論である。

__func__はUNIXのコンパイラーではサポートされるが、MSのそれではなかったのでMSの場合は関数の名前はあきらめること。

ログに書かれる内容は、

2008/05/15 18:54:14.764 DEBUG [xiproc.cpp:159 main_webmode] start do_text2pli(こんにちは)
2008/05/15 18:54:14.769 DEBUG [xiproc.cpp:172 main_webmode] start do_pli2wav()
2008/05/15 18:54:15.019 DEBUG [xiproc.cpp:190 main_webmode] start destroy()
2008/05/15 18:54:15.058 DEBUG [xiproc.cpp:193 main_webmode] end destroy()
2008/05/15 18:55:46.781 DEBUG [xiproc.cpp:133 main_webmode] start init()
2008/05/15 18:55:46.781 DEBUG [xiproc.cpp:135 main_webmode] end init()
2008/05/15 18:55:49.278 DEBUG [xiproc.cpp:141 main_webmode] end create()
2008/05/15 18:55:49.278 DEBUG [xiproc.cpp:148 main_webmode] fgets ==> こんにちは

のようなものになる。

log4jはどうしてあの出力を得られるのか

カテゴリー: プログラミング — admin @ 10:33 PM

log4jの面白いところは、javaの例外のスタックトレースを内部で利用しているところだ。

わざと例外を発生させて、そのスタックの部分を解析することにより、cat.debug(“XXX”);

のような呼び出しがどこで発生しているのかを探し出しているのである。多分そうだろうと想像していたが、ソースを見た時にその通りであったので納得した。こういう基本が想像できなくてはまずい。

古い投稿 »

Powered by WordPress