我创建了一个eclipse PDE项目,并使用slf4j-api和slf4j.log4j12包添加了log4j作为依赖项。在一个课程中,我创建了记录器:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyTest {
private static final Logger logger = LoggerFactory.getLogger(MyTest.class
.getName());
public void tt() {
logger.info("log-test");
}
}
但是当我使用OSGI启动配置运行PDE项目时,我收到警告:
log4j:WARN No appenders could be found for logger (loggin_test.MyTest).
log4j:WARN Please initialize the log4j system properly.
基于此信息:
我需要将log4j.properties放在PDE类路径中。我试图把它放在PDE项目的根目录中并添加:
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
log4j.properties
到build.properties窗格。但我仍然得到同样的警告。我在哪里将log4j.properties文件放在PDE项目中?
编辑:我也尝试将其添加到/ src文件夹,但它没有帮助。
答案 0 :(得分:2)
您已经遇到了OSGi的第一个资源可见性问题。请记住,在OSGi包中必须明确定义它们的依赖项。您的问题是您的bundle定义了一个log4j属性文件,但它是必须读取它的log4j包。但是log4j包对你的包没有任何了解(也不应该知道)。
这是问题的两个解决方案:
选项2是一个更好的解决方案,但如果您更容易找到选项1,那么请继续使用。
答案 1 :(得分:0)
AFAIK,你仍然需要Log4j JAR,因为SLF4J只是它的包装。从Apache web site下载JAR,将其添加到您的构建路径,它应该可以正常工作。
答案 2 :(得分:0)
我遇到了同样的问题。将包含log4j.xml的文件夹添加到Project Build Path是不够的(为什么不呢?)。无论如何,除了原因之外(也许eclipse大师可以为我们解答)我解决了我的问题,将包含log4j.xml的文件夹添加到eclipse“运行配置”。
在您第一次尝试运行独立应用程序并获得令人讨厌的“无法找到记录器的附加程序”消息后,请按照以下步骤操作:
答案 3 :(得分:0)
当我尝试使用slf4j-simple
转换为slf4j-log4j12
(同时添加log4j
jar)时,我遇到了同样的情况。在进行一些调试之后,就像SteveD提到的那样,问题是资源可见性的结果。在我的情况下,我有一个插件,其中包含我的日志库;但是,我不想在共享插件中指定我的日志属性。
我的方法可能适用于您的情况,即为每个希望具有日志记录功能的插件提供日志记录配置。对于需要记录的插件,我会在插件的激活器中添加如下内容:
Bundle bundle = bundleContext.getBundle();
URL entry = bundle.getEntry("log4j.properties");
try(InputStream inputStream = entry.openStream())
{
PropertyConfigurator.configure(inputStream);
}
catch(IOException e) {}
尽管不幸的是需要将代码添加到激活器中;我能够为每个插件配置不同的日志记录功能,我没有必要处理新的插件/ Eclipse伙伴注册,也没有必要处理在任何manifest或build.properties文件中管理log4j.properties文件。
其他笔记
答案 4 :(得分:0)
为什么不使用 platform logging facility?
我最近在Eclipse插件中添加了日志记录。我使用了PDE中内置的日志工具。我会发布这个以防万一这个选项被忽略了。我没有意识到我最初不需要添加log4j,也许其他人也没有意识到这一点。