trace() 만 사용했었는데 이런것도 있었나 봅니다.
일단 로깅을 하기위해서는 로거객체를 생성한다.
로거 객체는 Log 클래스의 static 메소드인 getLogger(String) 를 호출하면 ILogger 으로 리턴한다.
mx.logging.Log.getLogger(category:String):ILogger
참고로 저 매개변수인 category 는 아무거나 넣어도 상관없다.(아래 설명)
<?xml version="1.0" encoding="utf-8"?>
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="400" height="300"
>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.logging.ILogger;
import mx.logging.Log;
private var myLogger:ILogger = Log.getLogger("category");
protected function button1_clickHandler(event:MouseEvent):void
{
this.myLogger.debug("click ");
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout paddingTop="10" paddingLeft="10"/>
</s:layout>
<s:Button label="Button" click="button1_clickHandler(event)"/>
</s:Panel>
소스설명
Panel 을 상속받고 내부에 버튼이 있습니다.
버튼을 클릭하면 이벤트 핸들러에서 로거 객체에 "click" 라는 문자열을 보내게 되어있습니다.
이 컴포넌트를 애플리케이션에 추가를 하고 사용하면 아래와 같다.
<?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"
xmlns:com="com.*"
minWidth="955" minHeight="600">
<com:MyComponent x="171" y="164">
</com:MyComponent>
</s:Application>
로그가 찍히기 위해서는 애플리케이션소스에 <s:TraceTarget ... /> 를 추가 해야 한다.
<?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"
xmlns:com="com.*"
minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import mx.logging.LogEventLevel;
]]>
</fx:Script>
<fx:Declarations>
<s:TraceTarget
includeCategory="true"
includeLevel="true"
includeDate="true"
includeTime="true"
level="{LogEventLevel.DEBUG}"
fieldSeparator=" | "/>
</fx:Declarations>
<com:MyComponent x="37" y="21" width="400">
</com:MyComponent>
</s:Application>
소스설명
<fx:Declarations> 영역에 <s:TraceTarget> 를 추가하고 옵션을 설정합니다.
- includeCategory = 이 부분이 로거 객체를 얻을때 넣었던 category 문자열입니다.
- includeLevel = 레벨을 표시합니다.Flex 에서는 ALL, DEBUG, INFO, WARN, ERROR, FATAL 이 있습니다.
- includeDate = 날짜를 표시합니다.
- includeTime = 시간을 표시합니다.
- level = 로그 레벨을 설정합니다. 이때는 LogEventLevel의 상수를 사용하는게 바람직합니다.
로그 레벨에 대해서는 따로 포스팅을 해야겠네요^^;
- fieldSeparator = 각 옵션을 나누는 구분자입니다.
위와 같이 한다면 콘솔에 표시되는 로그는 아래와 같다.
7/20/2011 | 18:47:44.796 | [DEBUG] | category | click
아까 대충 넘어갔던 category 문자열은 저런 용도로 표시된다.
전용 Logger는 반드시 쓸수 있도록 지향해야 한다.
java 에서syso (System.out.print()) 를 사용하지 않고 Log4j 를 사용하는것과 마찬가지다.
특히 자바에서 과도한(특히 반복문)syso는 많은 리소스를 잡아먹는 원인중 하나이고. 불필요한 정보들은 로그분석을 어렵게 한다. 그래서 대부분 배포시에 로그부분을 삭제하거나 대부분 주석처리를 하도록 가이드를 하게된다. ( Log API 을 사용하면 레벨조정으로 해결됩니다)
'Flex / AIR / AS' 카테고리의 다른 글
[Flex4.5] AIR 용 라이브러리 프로젝트 생성하기. (0) | 2011.08.13 |
---|---|
[Flex3] 다운받는곳.. (0) | 2011.08.05 |
[Flex] SWC의 namespace 임의로 설정하기. (0) | 2010.03.23 |
google의 flexlib 프로젝트를 SVN으로 checkOut 하기. (0) | 2010.03.22 |
[FLEX3] 상속받은 클래스 스타일 프로퍼티의 초기화. (0) | 2010.02.09 |