我正在寻找在我的 flex 4.5 项目中记录消息的可能性。这应该涵盖 remoteClasses、errorHandler 中的错误消息或手动输入的消息。在阅读了很多网页之后,来自 parslay 的解决方案看起来不错。无论如何我想切换到这个框架。
好处是可以在运行时配置日志记录行为。但我不明白文档。也许是因为我对欧芹很陌生。谷歌也没有合适的结果。
您是否已经这样做了,您可以给我一些代码片段。非常感谢
坦率
编辑:由于 J_A_X 合理的批评,我添加了我的代码,因为我已经部分成功了。
首先我们需要一个配置文件,因为我想在运行时配置日志记录行为。这是项目根目录中的一个简单 xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<objects
xmlns="http://www.spicefactory.org/parsley"
xmlns:log="http://www.spicefactory.org/parsley/flex/logging"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.spicefactory.org/parsley
http://www.spicefactory.org/parsley/schema/2.3/parsley-core.xsd
http://www.spicefactory.org/parsley/flex/logging
http://www.spicefactory.org/parsley/schema/2.3/parsley-logging-flex.xsd"
>
<log:target level="info" type="components.SocketTarget">
</log:target>
</objects>
这是我的应用程序:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600"
initialize="onAppInitiallize(event)"
xmlns:parsley="http://www.spicefactory.org/parsley"
>
<fx:Script>
<![CDATA[
import mx.controls.Label;
import mx.events.FlexEvent;
import mx.logging.Log;
import org.spicefactory.lib.logging.LogContext;
import org.spicefactory.parsley.flex.logging.FlexLoggingXmlSupport;
protected function onAppInitiallize(event:FlexEvent):void
{
FlexLoggingXmlSupport.initialize();
LogContext.getLogger(this);
//Log.getLogger("myCat").info("MyInfo");
}
protected function button1_clickHandler():void
{
Log.getLogger(this.toString()).info("myMessage");
Log.getLogger(this.toString()).fatal("myMessage");
}
]]>
</fx:Script>
<fx:Declarations>
<parsley:ContextBuilder>
<parsley:XmlConfig file="config.xml"/>
</parsley:ContextBuilder>
</fx:Declarations>
<s:Button click="button1_clickHandler()" label="SendLogToParsley" />
</s:Application>
此时,日志记录将在 flex 构建器的控制台中工作,因为 parsley 默认使用 TraceTarget。现在,我想将我的日志文件发送到套接字。我写了一个粗略的 SocketTarget。
package de.axurit.components
{
import flash.net.Socket;
import mx.logging.AbstractTarget;
import mx.logging.LogEvent;
import mx.logging.targets.LineFormattedTarget;
public class SocketTarget extends AbstractTarget
{
private var _host:String;
private var _port:int;
private var _socket:Socket;
public function SocketTarget(host:String = "localhost",port:int=8085)
{
_host = host;
_port = port;
_socket = new Socket (host,port);
super();
}
override public function logEvent (event:LogEvent):void
{
trace ("logevent" + event.message);
_socket.writeUTF(event.message + String.fromCharCode(13));
_socket.flush();
}
}
}
在欧芹文档中,我可以看到评论
此标记创建的默认目标类型是 TraceTarget。您可以显式声明其他目标类型:
如果我添加类型属性,我会收到错误消息“BootstrapProcessor 中的一个或多个错误”。和我在错字后收到的一样。
你能给我一些提示,我如何将我的日志发送到套接字目的地?