http://www.cnblogs.com/kapok/archive/2005/11/25/284768.html
学前背景:
1. Weblogic部署war并不像tomcat一样会把war解包,所以硬盘物理文件夹结构并不存在.
说明:Weblogic部署war包会解包,如我的包WebTest.war包。部署之后会在
C:/bea/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_user/WebTest目录生成文件
这里user_projects为自己创建的域名,在WebTest目录下有我的jsp如index.jsp,可以修改这个jsp的内容刷新浏览器可以看到修改后的结果
2. log4j的配置文件有properties文件和xml格式两种.
解决办法,使用一个load-on-start=0的log4jinit servlet来完成log4j的初始化:
如果使用xml格式的log4j的配置文件,没有直接的办法实现初试话,我的解决办法:
1
package
log;
2
3
import
org.apache.log4j.LogManager;
4
import
org.apache.log4j.xml.DOMConfigurator;
5
6
import
java.io.InputStream;
7
8
import
javax.xml.parsers.FactoryConfigurationError;
9
10
11
/**
12
*
13
*
14
*
@author
15
*/
16
public
class
StreamedDOMConfigurator
extends
DOMConfigurator {
17
18
//
~ Methods ================================================================
19
20
public
static
void
configure(InputStream fis)
21
throws
FactoryConfigurationError {
22
23
try
{
24
25
new
DOMConfigurator().doConfigure(fis,
26
LogManager.getLoggerRepository());
27
}
finally
{
28
29
if
(fis
!=
null
) {
30
31
try
{
32
33
fis.close();
34
}
catch
(java.io.IOException e) {
35
36
System.err.println(
"
Could not close [
"
+
fis
+
"
].
"
);
37
}
38
}
39
}
40
}
41
}
42
package
log;
2
3
import
org.apache.log4j.LogManager;
4
import
org.apache.log4j.xml.DOMConfigurator;
5
6
import
java.io.InputStream;
7
8
import
javax.xml.parsers.FactoryConfigurationError;
9
10
11
/**
12
*
13
*
14
*
@author
15
*/
16
public
class
StreamedDOMConfigurator
extends
DOMConfigurator {
17
18
//
~ Methods ================================================================
19
20
public
static
void
configure(InputStream fis)
21
throws
FactoryConfigurationError {
22
23
try
{
24
25
new
DOMConfigurator().doConfigure(fis,
26
LogManager.getLoggerRepository());
27
}
finally
{
28
29
if
(fis
!=
null
) {
30
31
try
{
32
33
fis.close();
34
}
catch
(java.io.IOException e) {
35
36
System.err.println(
"
Could not close [
"
+
fis
+
"
].
"
);
37
}
38
}
39
}
40
}
41
}
42
然后:
1
package
servlet;
2
3
import
java.io.FileInputStream;
4
import
java.io.FileNotFoundException;
5
6
import
javax.servlet.http.HttpServlet;
7
import
javax.xml.parsers.FactoryConfigurationError;
8
9
import
Config;
10
import
log.StreamedDOMConfigurator;
11
import
util.StringUtil;
12
13
14
/**
15
*
16
*
17
*/
18
public
class
Log4jInitServlet
extends
HttpServlet {
19
20
//
~ Methods ================================================================
21
22
public
void
init() {
23
24
String log4jFileLoc
=
Config.getInstance()
25
.getLog4jFileLoc();
26
27
if
(StringUtil.isEmpty(log4jFileLoc)) {
28
29
log4jFileLoc
=
getInitParameter(
"
log4j-init-file
"
);
30
}
31
32
if
(log4jFileLoc
!=
null
) {
33
34
try
{
35
StreamedDOMConfigurator.configure(
new
FileInputStream(log4jFileLoc));
36
}
catch
(FileNotFoundException e) {
37
38
//
TODO Auto-generated catch block
39
e.printStackTrace();
40
}
catch
(FactoryConfigurationError e) {
41
42
//
TODO Auto-generated catch block
43
e.printStackTrace();
44
}
45
46
47
}
48
}
49
}
50
package
servlet;
2
3
import
java.io.FileInputStream;
4
import
java.io.FileNotFoundException;
5
6
import
javax.servlet.http.HttpServlet;
7
import
javax.xml.parsers.FactoryConfigurationError;
8
9
import
Config;
10
import
log.StreamedDOMConfigurator;
11
import
util.StringUtil;
12
13
14
/**
15
*
16
*
17
*/
18
public
class
Log4jInitServlet
extends
HttpServlet {
19
20
//
~ Methods ================================================================
21
22
public
void
init() {
23
24
String log4jFileLoc
=
Config.getInstance()
25
.getLog4jFileLoc();
26
27
if
(StringUtil.isEmpty(log4jFileLoc)) {
28
29
log4jFileLoc
=
getInitParameter(
"
log4j-init-file
"
);
30
}
31
32
if
(log4jFileLoc
!=
null
) {
33
34
try
{
35
StreamedDOMConfigurator.configure(
new
FileInputStream(log4jFileLoc));
36
}
catch
(FileNotFoundException e) {
37
38
//
TODO Auto-generated catch block
39
e.printStackTrace();
40
}
catch
(FactoryConfigurationError e) {
41
42
//
TODO Auto-generated catch block
43
e.printStackTrace();
44
}
45
46
47
}
48
}
49
}
50
如果使用properties格式的,那就简单了,网上就有解决办法:
1
//
Properties props = new Properties();
2
//
InputStream is = getServletContext()
3
//
.getResourceAsStream(log4jFileLoc);
4
//
InputStream istream = null;
5
//
try {
6
//
istream = new FileInputStream(log4jFileLoc);
7
//
istream = ClassLoader.getSystemResourceAsStream(log4jFileLoc);
8
//
istream = new FileInputStream(log4jFileLoc);
9
//
System.out.println(istream);
10
//
props.load(istream);
11
//
props.list(System.out);
12
//
istream.close();
//
Properties props = new Properties();
2
//
InputStream is = getServletContext()
3
//
.getResourceAsStream(log4jFileLoc);
4
//
InputStream istream = null;
5
//
try {
6
//
istream = new FileInputStream(log4jFileLoc);
7
//
istream = ClassLoader.getSystemResourceAsStream(log4jFileLoc);
8
//
istream = new FileInputStream(log4jFileLoc);
9
//
System.out.println(istream);
10
//
props.load(istream);
11
//
props.list(System.out);
12
//
istream.close();