相关疑难解决方法(0)

将Log4j.properties放入Eclipse项目的正确位置在哪里?

我应该在Eclipse项目中添加log4j.properties文件以使其按预期工作?

java eclipse log4j classpath

58
推荐指数
6
解决办法
18万
查看次数

在单元测试期间禁用log4j输出

通常的做法是通过静态工厂获得记录器(虽然它完全支持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)

在运行单元测试套件时,如何以编程方式禁用它?

logging unit-testing log4j

13
推荐指数
1
解决办法
2万
查看次数

让log4j2与eclipse一起工作

我知道有很多问题已经被问到这个问题,但我一直试图让这个问题在几天内完成,而且当我开始时我不再向前推进.

我曾尝试使用-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)

java eclipse log4j

7
推荐指数
1
解决办法
2万
查看次数

如何在类路径上模拟属性文件的存在?

这肯定是一个普遍的问题.我有一个属性文件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.

我可以想到几个粗糙的解决方案:

  1. 在每次测试之前,找到文件系统上的文件,使用文件系统I/O进行复制,然后在测试后再次将其删除.但这很笨拙并且涉及很多冗余.更不用说我甚至不确定类路径目录是否可写.
  2. 使用模拟框架进行模拟 getResource.不知道我会怎么连做,尤其是有100万不同的方式来获取文件(this.getClass().getResourceAsStream(...),MyClass.class.getResourceAsStream(...),ClassLoader.getSystemClassLoader().getResourceAsStream(...)等)

我只是认为这一定是一个常见的问题,也许JUnit,Mockito,PowerMock,EasyMock等已有解决方案?

编辑:有人指出这个问题是重复的为从Eclipse运行的所有JUnit测试指定自定义log4j.properties文件但事实并非如此.那个问题是想要在主调用和测试调用之间有一个不同的属性文件.对我来说,我希望在测试调用和另一个测试调用之间有一个不同的属性文件.

java junit unit-testing properties mocking

6
推荐指数
1
解决办法
2859
查看次数

如何在编写jUnit for web servlet时管理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 tomcat log4j

4
推荐指数
1
解决办法
1716
查看次数

停止 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)

java logging junit log4j jenkins

4
推荐指数
1
解决办法
5327
查看次数