Log4j Guide

January 13, 2008 at 5:10 pm (Programming) (, )

ปกติเวลาเขียน java ถ้าอยากดูค่าตัวแปรก็มักจะใช้ System.out.println ให้แสดงผลออกมาทาง console
ตอนที่ Develop ก็ง่ายดีอ่ะนะ แต่พอเอาไปใช้งานจริงกับ App Server ก็ไม่ได้ช่วยอะไรดูผลอะไรก็ยาก
บางคนก็เขียน class เก็บ log file เอาเองแบบเขียนลง file ได้เป็นพอ ก็ช่วยได้บ้าง
แต่จริงๆแล้วควรมีการเก็บ log การทำงานของโปรแกรมให้เป็นระบบหน่อย ลองดูๆก็มาเจอLog4j ของ Apache ที่ดูเข้าท่าดี

Log4j เป็น class library ที่ไว้จัดการกับ Log โดยปกติแล้วจะมี Console, File, Database และ E-Mail แต่ก็สามารถเขียนเพิ่มเติมเองได้
Level ของ Log จะแบ่งเป็น 5 Level ตามนี้(จากต่ำไปสูง)

  1. Debug
  2. Info
  3. Warn
  4. Error
  5. Fatal

โดย Level ที่สูงกว่าจะเขียน Log ของ Level ต่ำกว่าติดมาด้วย
ใน code ของเราก็จะมีการเขียน logging โดยไม่ต้องสนใจว่าจะ log level ไหน ให้เขียนตามสะดวก แล้วค่อย set properties file ให้เก็บ log ที่ level ไหน

วิธีใช้งาน Log4j ก่อนก็ต้องไป download  log4j มาจาก Apache log4j ก่อน แล้ว add log4j.jar เข้ามาใน project
ตัวอย่าง code

import org.apache.log4j.Logger;
public class LogClass {

private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
public void getI(){};
public static void main(String[] args) {

log.debug(“Debug”);
log.info(“Info”);
log.warn(“Warn”);
log.error(“Error”);
log.fatal(“Fatal”);
try{

LogClass clz=null;
clz.getI();

}
catch(Exception ex){log.error(“Error Performing Operation”,ex);}

}

}

ต่อไปต้องมีการสร้าง file configure ซึ่งจะเป็นในแบบ Properties หรือเป็น XML ก็ได้ แล้วแต่ความถนัด เพื่อจะกำหนดค่าต่างๆของการ write log โดยถ้าไม่ได้สั่ง load file configure ก็จะใช้ file ชื่อ log4j.properties ดังตัวอย่าง

 ### file appender
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=’.'yyyy-MM-dd
log4j.appender.file.File=/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%n

log4j.rootLogger=Debug, file, stdout

จะเป็นการเก็บ log ใน File ชื่อ test.log และแสดงผลออกมาทาง console โดยมี Pattern แบบนี้

23:43:21,968 DEBUG LogClass:29 – Debug
23:43:21,968 INFO    LogClass:29 – Info
23:43:21,968 WARN  LogClass:29 – Warn
23:43:21,968 ERROR LogClass:29 – Error
23:43:21,968 FATAL LogClass:29 – Fatal

Pattern การแสดงสามารถตั้งค่าได้ที่ layoutใConversionPatternโดยมีค่าตามนี้

#%c Logger, %c{2 } last 2 partial names
#%C Class name (full agony), %C{2 } last 2 partial names
#%d{dd MMM yyyy HH:MM:ss } Date, format see java.text.SimpleDateFormat
#%F File name
#%l Location (caution: compiler-option-dependently)
#%L Line number
#%m user-defined message
#%M Method name
#%p Level
#%r Milliseconds since program start
#%t Threadname
#%x, %X see Doku
#%% individual percentage sign
#Caution: %C, %F, %l, %L, %M slow down program run!

เราสามารถ Load file configure ได้ตามนี้

PropertyConfigurator.configure(“c:\\data\\config\\log4j.properties”);

เขียน ex.printStackTrace(); ลง log

log.error(“Error Performing Operation”,ex);

Link:

Permalink Leave a Comment

WebSphere Class Load Policy

January 9, 2008 at 4:05 pm (Programming) ()

WebSphere เครื่องที่ไว้ใช้ UAT เกิดปัญหา ClassNotFoundException ทั้งๆก็เห็นอยู่ว่ามี Class นั้นอยู่ใน Application ที่ Deploy ลงไป
ก็หากันอยู่ครึ่งค่อนวัน ลองโน่นลองนี่ จนสุดท้ายน้องมันไปเจอ Property อยู่ตัวหนึ่งในไม่เหมือนกับเครื่อง Develop ชื่อ Class Load Policy ในหน้า Server Configure พอเห็นค่าที่ต้อง Set ก็คิดว่าน่าจะเกี่ยว เพราะค่าที่มีให้เลือกคือ Single กับ Multiple โดยที่เครื่อง UAT set เอาไว้เป็น Single

ปกติ Application ที่ Deploy ก็ไม่ได้ยุ่งเกี่ยวกัน มีการใช้ class ซ้ำๆกัน แต่ก็แยกกันไปคนละที่ ซึ่งถ้า set Class Load Policy ไว้เป็น Single ก็น่าจะทำให้ WebSphere เกิดอาการร่วนขึ้น เพราะ Class ใช้เหมือนๆ (package ยังที่เดียวกันซะอีก)

สรุปพอ set ค่าเป็น Multiple แล้ว อาการร่วนต่างๆก็หายไป

Permalink Leave a Comment

WebSphere share library

January 9, 2008 at 3:46 pm (Programming) ()

First step is create directory of shared libraries on WebSphere’s Server

  1. Export library class to Jar file
  2. Ftp library file to server

 The next step is create Shared Libraries in WebSphere

  1. From Environment menu, choose Share Library
  2. WebSphere will Shared Libraries Screen, then click New
  3. Input Name, Description and Class Path of jar file and click OK
  4. Save configure to server

 The next step is set Shared Library to Application

  1. Form Application Menu, choose Enterprise Applications
  2. Select Application for assign Share Library
  3. In Application Configuration at Additional Properties topic, click Libraries
  4. WebSphere will show Library Reference, then click Add
  5. Select Library and click OK
  6. Save configure to server and Restart Application
  7. Application will include share library, finish

Permalink Leave a Comment

Execute Dynamic SQL in DB2 Store Procedure

January 9, 2008 at 3:38 pm (Programming) ()

วิธีการสร้าง SQL Statement ใน Store Procedure ของ DB2 และ Return Cursor ออกมา สามารถทำได้ตามนี้

CREATE PROCEDURE SP_COUNT_ROW( IN pTblName   VARCHAR(50) )
RESULT SET 1
LANGUAGE SQL
BEGIN

DECLARE vTmp VARCHAR(200);
DECLARE vStmt statement;

DECLARE c1 CURSOR WITH RETURN FOR vStmt;

SET vTmp = ‘SELECT count(*) as RowCount,’||pTableName||’ as TblName  ‘||FROM ‘|| pTblName ;
prepare vStmt from vTmp;

OPEN c1;

END

จากตัวอย่างเป็นการส่งชื่อ Table มาทำการ Count หา Row ที่มีอยู่ ผลลัพธ์ได้จะมีเป็น

call  SP_COUNT_ROW(‘CUSTOMERS’)

RowCount       TableName
———–       ———————
332,456            CUSTOMERS

ที่น่าแปลกใจก็คือมี Type variable “Statement” ด้วยเรอะ

Permalink Leave a Comment

What’s new in Visual Studio 2008

December 31, 2007 at 2:08 pm (Programming) (, )

Visual Studio 2008

ใช้งาน Visual Studio มาตั้งแต่เรียน ก็นับสิบปีแล้ว ทุกวันนี้ก็ยังไปเกี่ยวข้องกับ Visual Studio 6 อยู่
ว่าไปจริงๆตัว VS ตัวแรกที่มาำจับเป็นเรื่องเป็นราวหลังจากกลับมาทำงาน Programming อีกก็เป็นตัว 2005 แล้ว
ข้าม Visual Studio .Net, Visual Studio 2003 ไปสองตัว

ใช้ VS2005 กับ .Net 2.0 ได้ไม่ทันไร ก็มีตัวใหม่ออกมาอีกแล้ว ก็เลยจะมาดูกันว่าตัวVS2008 นี้มีอะไรใหม่ๆบ้าง
จริงๆไปอ่านดูใน What’s New in Visual Studio 2008 จะครบถ้วนกว่า ขอยกหัวข้อใหญ่ๆที่คิดว่ามีประโยชน์มาแล้วกัน

  1. IDE support project ทั้ง .Net 2.0, 3.0 และ 3.5 สร้าง project supportของแต่ละ framework ได้
  2. IntelliSense ที่ดูรวดเร็วขึ้น
  3. Create Windows Presentation Foundation (WPF) Project
  4. Ajax Web Project
  5. Report Application Project
  6. Language-Integrated Query (LINQ)
  7. Object Relational Designer เอาไว้สร้าง class ให้ map กับ table

ที่ต้องศึกษาใหม่ๆก็คงเป็น WPF แต่ก็ยังไม่รู้ว่าจะเอาไปใช้ในงานเมื่อไร ดูเหมือนเป็นของเล่นมากกว่า
ส่วน LINQ ตัวรูปแบบภาษาไม่เท่าไร แต่แนวคิดนี้เปลี่ยนวิธีการเขียนโปรแกรมกันไปเลย ต้องศึกษาดูให้มากๆก่อนจะเอาไปใช้ได้

Permalink Leave a Comment