我正在开发一个独立的Java应用程序,面向下面 启动我的应用程序时发出log4j警告:
log4j:WARN找不到logger(org.springframework.core.env.StandardEnvironment)的appender。 log4j:WARN请正确初始化log4j系统。
但是,我可以在加载后看到所有“弹簧相关”日志 春天背景(下面主要方法中的第3行),即警告 甚至在加载弹簧上下文之前,但在加载后 弹簧上下文,正在记录弹簧日志。
我正在提供我的应用程序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 logger。 我想知道是否有更好的方法可以在启动过程中删除Spring Log4j警告,方法是保留应用程序之外的spring log4j level属性。
请帮忙。提前谢谢。
答案 0 :(得分:2)
此警告告诉我们,在运行时无法在类路径中找到log4j.properties。当你运行你的应用程序时,确保你已经真正掌握了它,而不仅仅是在某个IDE或其他地方作为项目的一部分。
并检查bean配置的路径...假设{MYPROJECT_HOME}和log4j.properties
之间没有足够的/<value>file:///{MYPROJECT_HOME}log4j.properties</value>
还有其他两种解决方法,如果您确定,您可以在正确的位置拥有属性。首先,您可以设置JVM选项,以显示属性文件的路径:
-Dlog4j.configuration=file:///somepath/log4j.properties
或者您可以像这样配置:
BasicConfigurator.configure();
但是在这种情况下,你所有的日志记录都只是System.out,所以它可能不是你想要的。