一个log4j配置的问题!我快疯了!

shipatrioc 2004-01-08 03:55:50
每次启动tomcat都报下面的错误!
java.security.AccessControlException: access denied (java.io.FilePermission E:\t
ools\jakarta-tomcat-4.1.24\webapps\web\WEB-INF\classes\log.txt write)
at java.security.AccessControlContext.checkPermission(AccessControlConte
xt.java:270)
at java.security.AccessController.checkPermission(AccessController.java:
401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
at java.lang.SecurityManager.checkWrite(SecurityManager.java:975)
at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
at java.io.FileOutputStream.<init>(FileOutputStream.java:102)
at java.io.FileWriter.<init>(FileWriter.java:61)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:284)
at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java
:198)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:239)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:2
47)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.j
ava:123)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.j
ava:87)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigura
tor.java:637)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigura
tor.java:595)
at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyC
onfigurator.java:522)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurato
r.java:412)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurato
r.java:309)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.
java:317)
at org.dbforms.ConfigServlet.initLogging(ConfigServlet.java:153)
at org.dbforms.ConfigServlet.init(ConfigServlet.java:94)
at javax.servlet.GenericServlet.init(GenericServlet.java:256)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.
java:935)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:82
3)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContex
t.java:3420)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
608)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:821)
at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:
162)
at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(Contain
erBase.java:182)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:80
5)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:579)

at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDep
loyer.java:307)
at org.apache.catalina.core.StandardHost.install(StandardHost.java:772)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j
ava:559)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:401
)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:718)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:358)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:166)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1196)

at org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)

at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347
)
at org.apache.catalina.core.StandardService.start(StandardService.java:4
97)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:219
0)
at org.apache.catalina.startup.Catalina.start(Catalina.java:512)
at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
...全文
280 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
netcobol 2004-01-12
  • 打赏
  • 举报
回复
package com.sinotrans.util;

import java.util.Properties;
import java.io.InputStream;
import java.io.IOException;
import org.apache.log4j.Category;

public class PropertyUtil {
private static Properties property;
private String propertyFile;
//static Category cat = Category.getInstance(PropertyUtil.class.getName());
/*
static {
try {
org.apache.log4j.PropertyConfigurator.configure(PropertyUtil.getProperty(
"log4j.properties"));
}
catch (Exception e) {
e.printStackTrace();
}
}*/

private PropertyUtil(String propertyFile) throws IOException {
this.propertyFile = propertyFile;
InputStream input = this.getClass().getClassLoader().getResourceAsStream(this.
propertyFile);
property = new Properties();
property.load(input);
}

public static Properties getProperty(String propertyFile) throws IOException {
if (property == null) {
new PropertyUtil(propertyFile);
}
return property;
}

public void setPropertyFile(String propertyFile) {
this.propertyFile = propertyFile;
}

public String getPropertyFile() {
return propertyFile;
}

public static void main(String[] args) {
System.out.println("dklsfjl;dsa");
try {
Properties pro = PropertyUtil.getProperty("log4j.properties");
//System.out.println(pro.get("log4j.rootCategory"));
}
catch (Exception e) {
e.printStackTrace();
}

}

}
netcobol 2004-01-12
  • 打赏
  • 举报
回复
我给你一个:
1。java class
package com.netcobol.log;

import org.apache.log4j.*;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

import org.apache.log4j.*;
import com.sinotrans.util.PropertyUtil;

// How to use log4j
public class TestLogging {

// Initialize a logging category. Here, we get THE ROOT CATEGORY
//static Category cat = Category.getRoot();
// Or, get a custom category
static Category cat = Category.getInstance(TestLogging.class.getName());
static {
try{
org.apache.log4j.PropertyConfigurator.configure(PropertyUtil.getProperty(
"log4j.properties"));
}catch(Exception e){

}
}
// From here on, log away! Methods are: cat.debug(your_message_string),
// cat.info(...), cat.warn(...), cat.error(...), cat.fatal(...)

public static void main(String args[]) {
// Try a few logging methods
cat.debug("Start of main()");
cat.info("Just testing a log message with priority set to INFO");
cat.warn("Just testing a log message with priority set to WARN");
cat.error("Just testing a log message with priority set to ERROR");
cat.fatal("Just testing a log message with priority set to FATAL");
try {
org.apache.log4j.PropertyConfigurator.configure(PropertyUtil.getProperty("xxx.properties"));

}
catch (Exception ex) {
ex.printStackTrace();
cat.error("Failed to load xxx.proerties", ex);
}
// Alternate but INCONVENIENT form
cat.log(Priority.DEBUG, "Calling init()");

new TestLogging().init();
}

public void init() {
java.util.Properties prop = System.getProperties();
java.util.Enumeration enum = prop.propertyNames();

cat.info("***System Environment As Seen By Java***");
cat.debug("***Format: PROPERTY = VALUE***");

while (enum.hasMoreElements()) {
String key = (String) enum.nextElement();
cat.info(key + " = " + System.getProperty(key));
}
}

}

2.
#### Use two appenders, one to log to console, another to log to a file
log4j.rootCategory=debug, stdout, R

# Print only messages of priority WARN or higher for your category
log4j.category.your.category.name=WARN
# Specifically inherit the priority level
#log4j.category.your.category.name=INHERITED

#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

#### Second appender writes to a file
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=c:/example.log

# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

youthy_yy 2004-01-12
  • 打赏
  • 举报
回复
gz
54sunboy 2004-01-12
  • 打赏
  • 举报
回复
http://hedong.3322.org/archives/000193.html
http://hedong.3322.org/archives/000195.html
http://hedong.3322.org/archives/000197.html


很不錯的,我就是參考他的還搞店log4j的
cooboo 2004-01-11
  • 打赏
  • 举报
回复
http://hedong.3322.org/archives/000193.html
http://hedong.3322.org/archives/000195.html
http://hedong.3322.org/archives/000197.html

他的分析写的比较好,看看吧:)
good luck
hutlyx 2004-01-11
  • 打赏
  • 举报
回复
安全问题吧,改 安全策略文件
{java.home}/lib/security/java.policy (Solaris)
{java.home}\lib\security\java.policy (Windows)
jscsqb 2004-01-09
  • 打赏
  • 举报
回复
。。。。。。
shipatrioc 2004-01-09
  • 打赏
  • 举报
回复
上面列的错误信息不是很全:

log4j:ERROR No appenders could be found for category (com.pow2.webgui.WidgetFact
ory).
log4j:ERROR Please initialize the log4j system properly.
ConfigServlet::initLogging - log4j configuration str = [E:/tools/jakarta-tomcat-
4.1.24/webapps/web/WEB-INF/Pow2Toolkit.properties]
java.security.AccessControlException: access denied (java.io.FilePermission E:\t
ools\jakarta-tomcat-4.1.24\webapps\web\WEB-INF\classes\log.txt write)
shipatrioc 2004-01-09
  • 打赏
  • 举报
回复
是tomcat的问题,我下的一个开源软件,是用tomcat3.X部署的,
我用了4.x后,就出了上面的问题!我发mail问了软件的作者,他给我说
3.x和4.x的web.xml的配置文件有所不同,我按他提供的解决方案,还是不行,
他说要等一段时间,调试好后,再给我答复!
各位老大,有没有碰见过这种情况!
xmvigour 2004-01-08
  • 打赏
  • 举报
回复
系统Policy文件的缺省位置为:
{java.home}/lib/security/java.policy (Solaris)
{java.home}\lib\security\java.policy (Windows)

把上面的打开然后添加
permission java.io.FilePermission “E:/tools/jakarta-tomcat-4.1.24/webapps/web/WEB-INF/classes", “read";

保存 重启 试试看

其实为什么一定要放那????
过客猫2022 2004-01-08
  • 打赏
  • 举报
回复
你把JDK重装一下,如果用的是JBuilder就把Jbuilder重装一下,我以前也碰到没有对文件访问权限的问题
shipatrioc 2004-01-08
  • 打赏
  • 举报
回复
各位大哥小弟们,问题还没有解决怎么就说来晚了!
可不要误导人,我这100两银子可不想白花!
gong1 2004-01-08
  • 打赏
  • 举报
回复
来晚了
哈哈
Leemaasn 2004-01-08
  • 打赏
  • 举报
回复
是啊。

试试楼上的?



Up。。。

^@^
shipatrioc 2004-01-08
  • 打赏
  • 举报
回复
其实配置本身的问题应该不大,我自己的配置是这样的:
log4j.rootCategory=info, stdout, R
#log4j.rootCategory=debug, stdout, R
log4j.category.org.dbforms=warn, stdout
log4j.category.com.pow2=debug, stdout, R
#log4j.category.com.pow2.acl=debug, stdout, R

# stdout Appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n


# RollingFile Appender
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File = E:/tools/jakarta-tomcat-4.1.24/webapps/web/WEB-INF/classes/log.txt

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
#log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c%m%n
关键是没有权限读写log文件
(楼上的那位仁兄,麻烦你以后copy东西时,也顺手打几个回车,要对大家的眼睛负责呀!)
jscsqb 2004-01-08
  • 打赏
  • 举报
回复
用这个试试看

第一步 配置log4j配置文件
=========================
# Set root logger level to DEBUG and its only appender to A1
#log4j中有五级logger
#FATAL0
#ERROR3
#WARN4
#INFO6
#DEBUG7
log4j.rootLogger=DEBUG, A1
# A1 is set to be a ConsoleAppender.
#log4j中Appender有几层
#ConsoleAppender输出到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#输出格式 具体查看log4j javadoc org.apache.log4j.PatternLayout
#d 时间 ....
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

第二步:写启动的Servlet


import org.apache.log4j.PropertyConfigurator ;import org.apache.log4j.Logger ;import org.apache.log4j.Level ;public class InitServlet extends HttpServlet {public void init() { ServletContext sct = getServletContext(); String prefix = sct.getRealPath("/"); //log4j 配置文件存放目录 System.out.println("[....Log4j]: The Root Path: " + prefix); System.out.println("[....Log4j]: InitServlet init start..."); String file = getInitParameter("log4j"); //log4j 配置文件 if (file != null) { PropertyConfigurator.configure(prefix + file); //根据配置初始化log4j } System.out.println("[....Log4j]: InitServlet Init Sucess...");}public void doGet(HttpServletRequest req, HttpServletResponse res) {}public void doPost(HttpServletRequest req, HttpServletResponse res) {}}
wizard0128 2004-01-08
  • 打赏
  • 举报
回复
我是用的这个配置文件 你看看把

#### Use two appenders, one to log to console, another to log to a file
log4j.rootCategory=debug, stdout, R

# Print only messages of priority WARN or higher for your category
log4j.category.your.category.name=WARN

#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

#### Second appender writes to a file
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

shipatrioc 2004-01-08
  • 打赏
  • 举报
回复
在网上查过一些帖子,说是policy文件的问题,但不知写过的policy文件何时生效,怎样才能生效!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧