在加载Spring上下文之前避免Log4j警告

时间:2015-09-02 19:28:32

标签: java spring logging log4j slf4j

  

我正在开发一个独立的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属性。

请帮忙。提前谢谢。

1 个答案:

答案 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,所以它可能不是你想要的。