我使用netbeans 6.7.1和glassfish v2.1编写了一个Web服务项目,将log4j.properties放到项目的根目录并使用:
static Logger logger = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
在构造函数中:
PropertyConfigurator.configure("log4j.properties");
Run Code Online (Sandbox Code Playgroud)
和功能:
logger.info("...");
logger.error("...");
// ...
Run Code Online (Sandbox Code Playgroud)
但是,它是错误信息(实际上,我试图将它几乎放在我能够实现的每个目录上):
log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.
Run Code Online (Sandbox Code Playgroud)
我想为VM argument从Eclipse运行的所有JUnit测试指定一个特定的Eclipse
-Dlog4j.configuration=log4j-dev.properties
Run Code Online (Sandbox Code Playgroud)
这是因为我希望所有JUnit测试而不是默认log4j.properties文件都能获取特定的log4j配置文件.
到目前为止,我必须为每个JUnit测试指定上面的VM argument(in Run Configurations -> Arguments -> VM arguments),这使得它很麻烦,因为我有很多测试.
我将 log4j 的依赖项放入 pom.xml 文件中:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
写入以下 log4j.properties 文件:
log4j.rootLogger=信息、标准输出、控制台 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j. appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
并将此文件放在“资源”文件夹下。
最后,我输入环境变量 LOG4J_log4j.configurationFile = log4j.properties
尽管如此,当我运行我的应用程序时,该行:
logger.info("Hello");
Run Code Online (Sandbox Code Playgroud)
不向控制台写入任何内容。你知道可能是什么问题吗?
根据log4j手册,我应该将log4j.properties放到src文件夹中.我将此文件复制到我认为会影响log4j的所有可能位置.但是,这不起作用.
TestEM类包含许多单元测试函数(我使用testng).我运行其中一个测试函数,它引用了feedback.strategy包中的一个类.

以下是log4j.properties文件的内容:
#log for class1
log4j.category.Demo1=DEBUG, dest1
log4j.appender.dest1=org.apache.log4j.FileAppender
log4j.appender.dest1.File=C:/Users/Asus/workspace/FeedbackProcess/logs/class1.log
log4j.appender.dest1.layout = org.apache.log4j.PatternLayout
log4j.appender.dest1.layout.ConversionPattern= %d %p [%t] (%c) \u2013 %m%n
Run Code Online (Sandbox Code Playgroud)