【发布时间】:2015-11-28 10:59:19
【问题描述】:
我正在开发一个独立的 Java 应用程序并面临以下问题 我的应用程序启动期间的 log4j 警告:
log4j:WARN 找不到记录器的附加程序(org.springframework.core.env.StandardEnvironment)。 log4j:WARN 请正确初始化log4j系统。
但是,我可以在加载后看到所有“弹簧相关”的日志 spring 上下文(下面 main 方法中的第 3 行),即警告 甚至在加载弹簧上下文之前,但在加载之后 spring 上下文,正在记录 spring 日志。
我在下面提供我的应用程序 Java 主类和 bean xml:
ApplicationStarter(主 Java 类):
public class ApplicationStarter {
@Autowired
private UserInputs userInputs;
@Resource
private volatile BlockingQueue<String> inputsQueue;
public static void main(String[] args) {
GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.setValidating(false);
context.load("MyProject-Beans.xml");
context.refresh();
MyProjectBean myBeanObj = (MyProjectBean)(context.getBean("myProjectBean"));
myBeanObj.startApplication();
}
}
我在开头也得到了下面的 log4j 代码 “MyProject-Beans.xml”文件:
<bean id="log4jInitialization" class=
"org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass"
value="org.springframework.util.Log4jConfigurer" />
<property name="targetMethod" value="initLogging" />
<property name="arguments">
<list>
<value>file:///{MYPROJECT_HOME}log4j.properties</value>
</list>
</property>
</bean>
我的项目 log4j.properties 文件:
log4j.category.org.springframework=INFO,MYPROJECT_CONSOLE_LOGS
log4j.category.com.myproject=INFO,MYPROJECT_CONSOLE_LOGS
log4j.appender.MYPROJECT_CONSOLE_LOGS=org.apache.log4j.ConsoleAppender
log4j.appender.MYPROJECT_CONSOLE_LOGS.layout=org.apache.log4j.PatternLayout
log4j.appender.MYPROJECT_CONSOLE_LOGS.layout.ConversionPattern=%d %p
%C{1}:%M():%m\n
目前我通过添加以下第一行来抑制警告 在 main() 方法中。
org.apache.log4j.Logger.getLogger("org.springframework").setLevel(Level.OFF);
但是,我不喜欢这行代码,因为它在应用程序类中对 spring 记录器进行了硬编码。 我想知道是否有更好的方法可以通过在应用程序之外保留 spring log4j 级别属性来在启动期间删除 Spring Log4j 警告。
请帮忙。提前致谢。
【问题讨论】:
-
为什么不在 log4j.properties 文件中定义它?
-
@Koby:我已经在项目中有 log4j.properties(从 spring beans xml 文件加载)。仅供参考,我在上面添加了 log4j.properties 文件内容。
标签: java spring logging log4j slf4j