2009년 4월 12일 일요일

AXIS: soap logging with log4j

client-config.wsdd로 soap로그를 남기는 것이 가능해졌지만 org.apache.axis.handlers.LogHandler는 common-logging을 사용하는 관계로 맘에 들지 않는다.
import org.apache.axis.handlers.BasicHandler를 상속받거나 handler를 구성(implement- 이건 한글로 뭐라 해야 되는지 항상 고민된다.)하면 간단하게 적용시킬 수 있다.


public class AxisLogHandler extends BasicHandler{
Logger logger = Logger.getLogger(AxisLogHandler.class);
public void invoke(MessageContext messageContext) throws AxisFault {
try{
logger.info(messageContext.getMessage().getSOAPBody() );
} catch (SOAPException e) { .....} }
}


대충 이정도만 해도 대충은 ... 쓸만하다.
구현 후 client-config.wsdd를 수정해 주면 된다.

2009년 4월 10일 금요일

LOG4J: log4j.properties 설정

프로퍼티 파일 위치는 class 폴더 (WEB-INF/class 같은) 또는 java -Dlog4j.configuration=file:/home/httpd/html/log4j.properties 같이 직접 지정.(http.sh 파일 등에)

log4j.rootLogger=DEBUG, stdout
log4j.logger.foo.boo=INFO, serviceInfo, serviceWarn, mail

#Console Log
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#info level File Log
log4j.appender.serviceInfo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serviceInfo.Threshold=INFO
log4j.appender.serviceInfo.File=/home/httpd/log/interpark/serviceInfo.log
log4j.appender.serviceInfo.DatePattern='.'yyyy-MM-dd
log4j.appender.serviceInfo.layout=org.apache.log4j.PatternLayout
log4j.appender.serviceInfo.layout.ConversionPattern=[%d] %-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#debug level File Log
log4j.appender.serviceWarn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serviceWarn.Threshold=WARN
log4j.appender.serviceWarn.File=/home/httpd/log/interpark/serviceWARN.log
log4j.appender.serviceWarn.DatePattern='.'yyyy-MM-dd
log4j.appender.serviceWarn.layout=org.apache.log4j.PatternLayout
log4j.appender.serviceWarn.layout.ConversionPattern=[%d] %-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#mail는 SMTPAppender(SMTP 메일)에 출력
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=ERROR
log4j.appender.mail.BufferSize=512
log4j.appender.mail.SMTPHost=mail.foo.co.kr
log4j.appender.mail.SMTPUsername=foo
log4j.appender.mail.SMTPPassword=boo
log4j.appender.mail.TimeFrame=30
log4j.appender.mail.MaxEMails=10
log4j.appender.mail.From=foo@foo.co.kr
log4j.appender.mail.To=boo@boo.co.kr
log4j.appender.mail.Subject=장애 안내
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{ISO8601} %5p [%t] (%F:%L) - %m%n

AXIS: XML LOG 기록

디버깅을 위해 요청 및 응답을 통해 생성되는 XML 코드를 캡처해야 하는 경우가 종종 있습니다. Java(Axis 사용), Python 및 Perl에서 생성된 XML을 캡처하는 방법은 다음과 같습니다.

Java - XML 결과물을 Apache Axis로 캡처
해당 파일을 Axis 클라이언트의 작업 디렉토리에 client-config.wsdd라는 이름으로 저장합니다. Axis에서 해당 파일을 자동으로 로드합니다. 아래와 같이 구성하면 Axis에서 모든 수신 및 전송 XML을 axis.log라는 파일로 저장합니다.


<!-- 해당 파일을 Axis 클라이언트의 작업 디렉토리에 "client-config.wsdd"라는 이름으로
저장합니다. Axis에서 해당 파일을 자동으로 로드합니다. 아래와
같이 구성하면 Axis에서 모든 수신 및 전송
XML을 "axis.log"라는 파일로 저장합니다.
-->

<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<handler name="log" type="java:org.apache.axis.handlers.LogHandler"/>

<globalConfiguration>
<requestFlow>
<handler type="log"/>
</requestFlow>
<responseFlow>
<handler type="log"/>
</responseFlow>
</globalConfiguration>

<transport
name="http"
pivot="java:org.apache.axis.transport.http.HTTPSender"/>

</deployment>