我需要记录可能超过 32k 字符限制的消息。如何使用调试(字符)扩展 LogWriter,或者使用 Logging Framework 记录大于 32k 个字符的消息的最佳方法是什么
1 回答
1
有一种方法,但它需要一些代码。
第一步是使用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个步骤
- 创建一个实现的类
ILoggerFilter - 将过滤器定义添加到
filter属性中logging.config - 将过滤器添加到您的记录器中
logging.config
于 2021-03-20T00:58:54.403 回答