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 并向其发布,
  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 回答