openedge - 用 debug(longchar) opensge 扩展 debug(character)
问题描述
我需要记录可能超过 32k 字符限制的消息。如何使用调试(字符)扩展 LogWriter,或者使用 Logging Framework 记录大于 32k 个字符的消息的最佳方法是什么
解决方案
有一种方法,但它需要一些代码。
第一步是使用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
推荐阅读
- sql - 如何使用 SSIS 将包含 Blob 列的表从一个 Oracle 表到另一个表
- python - Flask Restplus - 在服务器上找不到请求的 URL
- swift - 如何通过物化处理永无止境的链上的错误?
- sql-server - php如何通过使用活动目录连接到sql server
- entity-framework - 在实体框架中复制表
- r - 如何将每个变量范围除以R中的第二个变量范围
- r - 如何在R中的ggplot中更改堆叠堆积条形图的位置?
- c# - 将 CSV 上传到解决方案资源管理器
- localization - RealURL 对多语言站点使用 L=0 PostVar 而不是 /en PreVar
- google-cloud-platform - firestore - 查询根实体