0
OUTPUT TO "logfile.txt".

FOR EACH ...:
  ...
  PUT "Some log data". OUTPUT CLOSE. OUTPUT TO "logfile.txt" APPEND.
  ...
END.

ある時点でファイルを保存するための適切なステートメントが見つかりませんでした。UNBUFFERED APPENDおそらく遅いので使いたくありません。ロギングツールが組み込まれているのではないでしょうか?多分STREAMSが私を助けることができますか?OUTPUT TOステートメントで開くたびにログファイル名を指定する必要があるという私のソリューションの問題。ネストされたプロシージャには、ファイル名についての手がかりがない場合があります。

4

2 に答える 2

1

現状の質問はまだあいまいです。

LOG-MANAGER と同様の標準の「サービス」を介して出力をルーティングする方法が必要な場合は、次を使用してそれを行うことができます

  1. クラスの静的メンバー、
  2. 永続的な手順で API を使用し、それに PUBLISH することにより、
  3. セッションのスーパープロシージャーで API を使用し、その API を呼び出す

STREAMS は、単一のプロシージャまたはクラスの出力を単一のファイルに分離し、その出力が本番出力と混ざらないようにする方法を提供しますが、現在のプログラムに限定されているため、アプリケーションとしての一般的なソリューションではありません。 -全体のロギング機能。

于 2013-08-19T20:07:58.673 に答える
0

「保存」オプションはありません。

ただし...出力を強制的にフラッシュすることができます:

put control null(0).

「おそらく遅い」というのは非常に曖昧です。はい、バッファリングされていない出力の IO が増える可能性があります。しかし、それが本当に重要かどうかは、あなたがしていることとそれがどのように使われるかに大きく依存します. それが実際に問題になる可能性はほとんどありません。

STREAM は確かに物事を整理し、ネストされたプロシージャでファイルの名前を知る必要がないようにするのに役立ちます。

はい、ロギング ツールが組み込まれています。LOG-MANAGER システム ハンドルを見てください。

問題のコードは、次のように記述したほうがよいでしょう。

define stream logStream.

output stream logStream to value( "log.txt" ) append unbuffered.

for each customer no-lock:
  put stream logStream custName skip.
  /* put stream logStream control null(0). */  /* if you want to try fooling with buffered output... */
end.

output stream logStream close.
于 2013-08-19T14:31:53.890 に答える