首页 > 解决方案 > 用 debug(longchar) opensge 扩展 debug(character)

问题描述

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

标签: openedge

解决方案


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

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

您将需要构建LogMessage但不能使用它的公共属性(因为它们也是character. 所以您将需要使用LogMessage'AddContext方法。这需要一个字符作为键和 aProgress.Lang.Object作为值。您可以使用OpenEdge.Core.String,它保存 longchar 值。

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因为该WRITE-MESSAGE()方法只需要一个字符作为消息。

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

您将需要使用该COPY-LOB... APPEND语句将 longchar 值写入输出文件。

基本上有3个步骤

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

推荐阅读