2016-11-26 66 views
1

我在web应用程序中使用log4j2来记录用户交互。log4j2在web应用程序中启动不正确

这是一个Web 3.0应用程序在Tomcat 7.0.42

我使用的指令programmaticaly设置设置运行here

String dir = System.getProperty("catalina.base"); 

      ConfigurationBuilder< BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder(); 

      builder.setStatusLevel(Level.INFO); 
      builder.setConfigurationName("RollingBuilder"); // create a rolling file appender 
      LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout") 
        .addAttribute("pattern", "%d %-5level: %msg%n"); 
      ComponentBuilder triggeringPolicy = builder.newComponent("Policies") 
        .addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", 
    "250K")); 
      ComponentBuilder defaultStrat = builder.newComponent("DefaultRolloverStrategy") 
       .addAttribute("min", 2) 
       .addAttribute("max", 5); 
      AppenderComponentBuilder appenderBuilder = builder.newAppender("rolling", "RollingFile") 
        .addAttribute("fileName", dir + "/logs/admin.log") 
        .addAttribute("filePattern", dir + "/logs/admin-%d{MM-dd-yy}_%i.log") 
        .add(layoutBuilder) 
        .addComponent(triggeringPolicy) 
        .addComponent(defaultStrat); 
      builder.add(appenderBuilder); 

    // create the new logger 
      builder.add(builder.newLogger("AdminLogger", Level.INFO) 
        .add(builder.newAppenderRef("rolling")) 
        .addAttribute("additivity", false)); 

      builder.add(builder.newRootLogger(Level.DEBUG) 
        .add(builder.newAppenderRef("rolling"))); 
      LoggerContext ctx = Configurator.initialize(builder.build()); 
      LOGGER = LogManager.getLogger(UserLog.class.getName()); 

我已经包含的log4j的web-2.7.jar的网页应用程序。

我不希望自动初始化,所以我设置的context-param IS_LOG4J_AUTO_INITIALIZATION_DISABLED真

<context-param> 
    <description>Turn off auto initialization for log4j2</description> 
    <param-name>IS_LOG4J_AUTO_INITIALIZATION_DISABLED</param-name> 
    <param-value>true</param-value> 
</context-param> 

但是当我部署的应用程序,我得到的卡塔利娜日志文件以下警告

信息| jvm 1 | 2016/11/25 20:48:55 | ERROR StatusLogger未找到log4j2配置文件。使用默认配置:仅将错误记录到控制台。

所有的日志记录然后转到控制台而不是在我的初始化程序中设置的日志文件。

如果我删除log4j-web-2.7.jar当我部署并且记录器按预期工作时,log4j未初始化。没有警告和滚动日志文件被创建并且行为正确。

我在上下文参数中做了什么错误来关闭自动初始化? \

我可以安全地不包含log4j-web-2.7.jar吗?或者应该在部署和取消部署应用程序时做些什么?

感谢斯科特

回答

0

根据我在读manual,我觉得您的上下文参数不正确。根据“长篇小说”小节应该是:

<context-param> 
    <param-name>isLog4jAutoInitializationDisabled</param-name> 
    <param-value>true</param-value> 
</context-param>