reload log4j configuration on web application

เนื่องจากพบปัญหาว่า อยากจะแก้ไขไฟล์ log4j.properties เพื่อให้แสดง INFO,DEBUG,ERROR ตาม level ต่างๆ เวลาต้องการจะดู detail หากโปรแกรมเกิดปัญหา และไม่อยากจะ deploy web application(.war) ใหม่ จึงใช้วิธี สร้าง servlets ที่ทำการ initial config ให้ log4jโดยเมื่อจะทำการ initial log4j.properties ใหม่ก็สามารถเรียนก url http://{host:port}/{webname}/Log4jInit เพื่อให้โปรแกรมอ่าน log4j.properties ใหม่ได้เลย ว้าว มันช่าง ง่ายจริงๆ

โดยรายละเอียดมีดังนี้

1. ที่ web.xml ประกาศ servlet org.kojo.util.Log4jInit.java เอาไว้ดังนี้

........

<servlet>
 <servlet-name>Log4jInit</servlet-name>
 <servlet-class>org.kojo.util.Log4jInit</servlet-class>
 <init-param>
 <param-name>log4j-init-file</param-name>
 <param-value>WEB-INF/log4j.properties</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>Log4jInit</servlet-name>
 <url-pattern>/Log4jInit</url-pattern>
 </servlet-mapping>

........

2. implement class Log4jInit.java ดังนี้

/**
 *
 * @author wisaruthkea
 */
public class Log4jInit extends HttpServlet {

 @Override
 public void init() {
 setLog4jProp();
 }

 private void setLog4jProp() {
 String prefix = getServletContext().getRealPath("/");
 String file = getInitParameter("log4j-init-file");
 if (file != null) {
 System.out.println("log4j-init-file=" + prefix + file);
 PropertyConfigurator.configure(prefix + file);
 }
 }

 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 setLog4jProp();
 }

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 processRequest(request, response);
 }

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 processRequest(request, response);
 }
}

3. สร้าง ไฟล์ log4j.properties ไว้ในโครงสร้างของ web application โดยวางไว้ที่

WEB-INF/log4j.properties

4. เสร็จแล้วครับ เรียก URL เพื่อ initial config log4j.properties ใหม่

http://{host:port}/{webname}/Log4jInit

About WK

Kajook is a Senior Software Engineer. Job is Design & Develop in Java EE environment on Glassfish. I'm Interested in Agile software development ,iOS and Android.
This entry was posted in idea and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s