使用调试longcharopenge扩展调试字符

问题描述

我需要记录可能超过 32k 字符限制的消息。如何使用调试(字符)扩展 LogWriter,或者使用日志框架记录大于 32k 字符的消息的最佳方法是什么

解决方法

有一种方法,但需要一些代码。

第一步是使用 debug(LogMessage,...) 方法,而不是 debug(character,...) 方法。

您将需要构建 LogMessage 但不能使用其公共属性(因为它们也是 character。因此您将需要使用 LogMessage 的 {{1 }} 方法。这需要一个字符作为键和一个 AddContext 作为值。您可以使用 Progress.Lang.Object 的实例,它保存 longchar 值。

OpenEdge.Core.String

您可能还需要添加自己的过滤器以从该上下文读取此消息,并将其写入日志文件。您可以查看如何创建一个 here 的示例。

您需要写入“命名文件”而不是 using OpenEdge.Logging.*. using OpenEdge.Core.*. define variable logger as ILogWriter no-undo. define variable logMsg as LogMessage no-undo. logger = LoggerBuilder:GetLogger('something'). // do stuff define variable longcharWithLotsOfData as longchar no-undo. logMsg = new LogMessage(logger:Name,'short message'). logMsg:AddContext('long-message',new String(longcharWithLotsOfData)). logger:debug(logMsg). ,因为 LOG-MANAGER 方法只需要一个字符作为消息。

writer 需要输出 String 对象的 WRITE-MESSAGE() 属性; Value 返回一个字符。过滤器将需要检查从 ToString() 方法返回的对象的类型,并将其强制转换以获取值。

您需要使用 GetContext() 语句将 longchar 值写入输出文件。

基本上有3个步骤

  1. 创建一个实现 COPY-LOB... APPEND 的类
  2. 将过滤器定义添加到 ILoggerFilter 中的 filter 属性
  3. 将过滤器添加到 logging.config 中的记录器