Flex中的生产记录
没有在调试模式下运行时,有什么方法可以捕获Flex应用程序的跟踪语句吗?
还是在不运行调试器时有其他方法输出日志记录信息?
当前,我正在尝试修复仅在非常特定的部署方案中才会出现的错误,但是我发现对于某些情况,客户在报告错误或者其他问题时将日志发送给技术支持非常有用。
解决方案
我想我们是在谈论针对Flash Player的Adobe Flex吗?
如果是这样,我们可以编写自己的日志记录包装器类,该类将发送给它的日志消息传播到多个目标(例如跟踪堆栈和内部存储器),以便我们可以从应用程序内部访问日志,例如,当用户使用时将其发送到服务器。同意发送错误报告)。另请参阅Flex日志记录框架,以获取已存在的类似内容。
我实际上已经做了类似的事情-我有一个名为Log
的类,它带有在我的应用程序中使用的静态方法,如log()
,debug()
,error()
等。通过" trace()"将发送给它的所有消息转发到跟踪堆栈中,通过LocalConnection和/或者Socket(显然,套接字连接比LocalConnection快很多),将其转发到运行在同一主机上的"日志控制台"应用中将它们本地存储到一个数组中,以便用户可以直接在应用程序内发送错误报告以及日志输出。
当然,这种变化意味着我们必须将代码中的所有trace()
命令转换为对日志记录系统的调用,但这可以通过正则表达式搜索和替换轻松实现。
我们可以从Farata Systems尝试XPanel。这是一个本机Windows UI,即使对于在浏览器中运行的Flex应用程序,也可以使用Flex 3 Logging API显示日志消息。不幸的是,他们重新设计了网站,现在找不到了……也许Google会为我们提供帮助。
我们使用JavaScript做了一些不同的事情。客户可以打开一个"特殊"页面,该页面显示使用DHTML的日志记录和跟踪语句。 Flex应用程序调用JavaScript函数,该函数告知应用程序此页面是否已打开。如果不是,则禁用日志记录。如果已打开,则启用日志记录,并且所有日志语句都将添加到此页面。
请注意,由于沙箱限制,无法始终将日志记录输出写入文件系统。但是,客户可以如上所述轻松地复制和粘贴日志记录窗口的输出。
Google代码上有一个名为Thunder Bolt的项目,该项目可让我们编写在Firefox中运行应用程序时将显示在FireBug中的日志消息(当然,前提是我们已安装该扩展程序。)
使用此工具进行记录非常简单:
import org.osflash.thunderbolt.Logger; var myNumber: int = 5; var myString: String = "Lorem ipsum"; Logger.error ("Logging two objects: A number typed as int and a string", myNumber, myString);
我过去曾使用过爱尔康(alcon)。
http://blog.hexagonstar.com/alcon/