我应该在Eclipse项目中添加log4j.properties文件以使其按预期工作?
通常的做法是通过静态工厂获得记录器(虽然它完全支持DI原理).实际上它很好,除非你想完全摆脱日志记录,例如在运行单元测试时.
我可以通过使用以下拼写关闭log4j日志记录:
List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for (Logger logger : loggers) {
logger.setLevel(Level.OFF);
}
Run Code Online (Sandbox Code Playgroud)
它仍然在一开始就将一些设置信息打印到控制台:
log4j: reset attribute= "false".
log4j: Threshold ="null".
log4j: Retreiving an instance of org.apache.log4j.Logger.
log4j: Setting [test] additivity to [false].
log4j: Level value for test is [DEBUG].
...
Run Code Online (Sandbox Code Playgroud)
在运行单元测试套件时,如何以编程方式禁用它?
我知道有很多问题已经被问到这个问题,但我一直试图让这个问题在几天内完成,而且当我开始时我不再向前推进.
我曾尝试使用-Dlog4j.configuration=file:/path/to/log4j.properties,并-Dlog4j.debug在Eclipse VM参数(在调试和运行),并得不到任何输出
我试过使用.properties和.xml但没有快乐
试图把.xml和.properties文件放在根目录,src和我添加到我的类路径的外部文件夹中...仍然没有喜悦
我认为它在另一个lib/jar中使用另一个.xml或.properties文件,但因为我无法进行任何调试工作,我发现很难跟踪我在这里做错了什么...
任何帮助都会很棒!下面是代码..只有错误信息得到打印.
我已下载(http://logging.apache.org/log4j/2.x/download.html)并导入到我的应用程序中
log4j-api-2.0-beta8.jar
log4j-core-2.0-beta8
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class CucmServMonitor
{
private static final Logger logger = LogManager.getLogger(CucmServMonitor.class.getName())
public static void main(String[] args)
{
logger.error("testing ERROR level");
logger.trace("exiting application");
System.out.println(logger.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的xml文件log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud) 这肯定是一个普遍的问题.我有一个属性文件my-settings.properties,由应用程序类读取.当我编写测试类时,它需要测试可能存在的事物的不同场景,my-settings.properties以确保最大的代码覆盖率(例如,空属性文件,基本属性文件等).但我只能有一个my-settings.properties在我的src/test/resources.
如果只有一些注释,真正伟大的是什么
@MockFileOnClassPath(use = "my-settings-basic.properties", insteadOf = "my-settings.properties")
然后我可以my-settings-XXX.properties在我的文件中有多个文件,/src/test/resources并在每个测试方法上注释正确的文件.但我找不到这样的东西.我正在使用JUnit 4.12.
我可以想到几个粗糙的解决方案:
getResource.不知道我会怎么连做,尤其是有100万不同的方式来获取文件(this.getClass().getResourceAsStream(...),MyClass.class.getResourceAsStream(...),ClassLoader.getSystemClassLoader().getResourceAsStream(...)等)我只是认为这一定是一个常见的问题,也许JUnit,Mockito,PowerMock,EasyMock等已有解决方案?
编辑:有人指出这个问题是重复的为从Eclipse运行的所有JUnit测试指定自定义log4j.properties文件但事实并非如此.那个问题是想要在主调用和测试调用之间有一个不同的属性文件.对我来说,我希望在测试调用和另一个测试调用之间有一个不同的属性文件.
我正在开发web servlet并且与log4j.properities混淆了,我定义了在构造函数中调用initialize logger.
public static Logger logger = Logger.getLogger(MyProject.class.getName());
public MyProject() {
super();
// TODO Auto-generated constructor stub
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("log4j.properties");
PropertyConfigurator.configure(url);
}
Run Code Online (Sandbox Code Playgroud)
通常,关于web servlet的日志文件是指tomcat的日志目录.
log4j.rootLogger=debug, R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/myproject.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
Run Code Online (Sandbox Code Playgroud)
但是,在为webservlet编写jUnit时,日志文件指的是不正确的地址,因为$ {catalina.base}是空白文本.错误日志在这里.
[junit] log4j:ERROR setFile(null,true) call failed.
[junit] java.io.FileNotFoundException: /logs/myproject.log (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
所以,请教我明智的管理日志文件.我希望在通过jUnit测试时停止输出日志文件.
我使用 Junit 作为我的测试技术。除此之外,我还使用 log4j 从我的主应用程序进行日志记录。
我遇到一个问题,当 Jenkins 运行我的测试用例时,它将输出记录到我的应用程序日志文件中,这不太理想。
是否可以通过某种方式抑制这些日志消息?我的 log4j 属性如下;
log=/var/opt/jboss/standalone/log/myapp.log
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j.rootLogger=DEBUG, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.append=true
log4j.appender.FILE.file=${log}
log4j.appender.FILE.threshold=DEBUG
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %-5p %c - %m%n
Run Code Online (Sandbox Code Playgroud)