Here is a short HOWTO for making some initial configuring when using Commons logging or log4j. Additionally this post will describe how to set the default locale in a servlet environment.
First you will need to create a new class derived from HttpServlet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| package mypackage;
import java.util.Locale;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;
/**
* Initializes log4j so it reads its configuration from WEB-INF directory and sets default locale.
* @author Ralph Schuster
*
*/
public class LogConfiguratorServlet extends HttpServlet {
/**
* Serial ID.
*/
private static final long serialVersionUID = -5756062055681369027L;
private static final String DEFAULT_FILE = "WEB-INF/log4j.properties";
private static final String DEFAULT_LOCALE = "en_US"; // You can use "en", too.
/**
* Initializes log4j and sets default locale.
*/
public void init() {
// Do the log4j configuration
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("config-file");
// if the config-file is not set, then no point in trying
String s = null;
if (file != null) {
s = prefix+file;
} else {
s = prefix+DEFAULT_FILE;
}
PropertyConfigurator.configure(s);
LogFactory.getLog(getClass()).debug("log4j configuration file: "+s);
// Do the locale configuration
s = getInitParameter("locale");
if (s == null) s = DEFAULT_LOCALE;
Locale available[] = Locale.getAvailableLocales();
for (int i=0; i<available.length; i++) {
if (available[i].toString().equals(s)) {
Locale.setDefault(available[i]);
}
}
LogFactory.getLog(getClass()).debug("Default locale set to: "+Locale.getDefault());
}
/**
* Does nothing.
*/
public void doGet(HttpServletRequest req, HttpServletResponse res) {
}
} |
package mypackage;
import java.util.Locale;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;
/**
* Initializes log4j so it reads its configuration from WEB-INF directory and sets default locale.
* @author Ralph Schuster
*
*/
public class LogConfiguratorServlet extends HttpServlet {
/**
* Serial ID.
*/
private static final long serialVersionUID = -5756062055681369027L;
private static final String DEFAULT_FILE = "WEB-INF/log4j.properties";
private static final String DEFAULT_LOCALE = "en_US"; // You can use "en", too.
/**
* Initializes log4j and sets default locale.
*/
public void init() {
// Do the log4j configuration
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("config-file");
// if the config-file is not set, then no point in trying
String s = null;
if (file != null) {
s = prefix+file;
} else {
s = prefix+DEFAULT_FILE;
}
PropertyConfigurator.configure(s);
LogFactory.getLog(getClass()).debug("log4j configuration file: "+s);
// Do the locale configuration
s = getInitParameter("locale");
if (s == null) s = DEFAULT_LOCALE;
Locale available[] = Locale.getAvailableLocales();
for (int i=0; i<available.length; i++) {
if (available[i].toString().equals(s)) {
Locale.setDefault(available[i]);
}
}
LogFactory.getLog(getClass()).debug("Default locale set to: "+Locale.getDefault());
}
/**
* Does nothing.
*/
public void doGet(HttpServletRequest req, HttpServletResponse res) {
}
}
You then need to deploy the class in your servlet container and adjust the web.xml file:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <servlet>
</servlet-name>log4j-init</servlet-name>
<servlet-class>mypackage.LogConfiguratorServlet</servlet-class>
<init-param>
<param-name>config-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<init-param>
<param-name>locale</param-name>
<param-value>de_DE</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> |
<servlet>
</servlet-name>log4j-init</servlet-name>
<servlet-class>mypackage.LogConfiguratorServlet</servlet-class>
<init-param>
<param-name>config-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<init-param>
<param-name>locale</param-name>
<param-value>de_DE</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>