簡體   English   中英

如何在配置了 Java Annotations 並使用 log4j.properties 文件的 Spring Mvc 應用程序中配置 log4j

[英]How to configure log4j in a Spring Mvc application configured with Java Annotations and using a log4j.properties file

我正在使用Spring MVC 4.2.5.RELEASE Maven Web 應用程序,我正在使用帶有GlassFishSErver 4.1 Netbeans IDE,我想使用log4j 1.2.17所以我創建了一個 log4j.properties 文件,但它似乎是我的屬性找不到文件,因為我收到以下錯誤:

log4j:WARN No appenders could be found for logger (org.springframework.web.servlet.DispatcherServlet).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我使用 java 注釋配置了我的 Spring 應用程序,這里是我的配置

@Configuration
@EnableWebMvc
@ComponentScan({"config", "controllers"})
public class ConfigMVC extends WebMvcConfigurerAdapter {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");
}

@Bean
public UrlBasedViewResolver setupViewResolver() {
    UrlBasedViewResolver resolver = new UrlBasedViewResolver();
    resolver.setPrefix("/WEB-INF/jsp/");
    resolver.setSuffix(".jsp");
    resolver.setViewClass(JstlView.class);
    return resolver;
}

}

這是我的 WebInitializer

public class WebInicializar implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(ConfigMVC.class);
        ctx.setServletContext(servletContext);
        Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
        servlet.setInitParameter("throwExceptionIfNoHandlerFound", "true");
    }
}

這是我的控制器

@Controller
public class HomeController {

    private static final Logger logger = Logger.getLogger(HomeController.class);

    @RequestMapping(value = "/myPage", method = RequestMethod.GET)
    public String paginaSinMap(ModelMap map) {

    logger.info("This is an info log entry");
    logger.error("This is an error log entry");

    return "myPage";
}

這是我的log4j.properties

# LOG4J configuration
log4j.rootLogger=INFO, Appender1, Appender2

log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n

log4j.appender.Appender2=org.apache.log4j.FileAppender
log4j.appender.Appender2.File=D:/Logs/SpringMVC.log
log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n

我把這個 log4j.properties 放在我的資源文件夾中,這是我的項目結構

編輯:我沒有提到我的項目是一個使用 spring 的 maven web 應用程序,這是我的項目結構

MyWebAppProjectName
--Web Pages
  --WEB-INF
    --jsp
         index.jsp
    --resources
      --js
         js.js
      --css
         site.css
      log4j.properties
--Source Packages
  --config
      ConfigMVC.java
      WebInitializaer.java
  --controllers
      HomeController.java
--Test Packages
--Other Resources
  --src/main/resources
    --default package
--Dependencies
--Java Dependencies
--Project FIles

所以我把 log4j.properties 放在Other Resources/src/main/resources ,當我這樣做時,Netbeans 創建了一個default Package ,里面的文件就像這個default package/log4j-properties並且它工作的日志開始出現在輸出中一切都按預期工作。

我試圖在這個路徑src/main/resources創建一個名為Log4jResource的包,但是當我這樣做時它停止工作並且錯誤再次顯示,所以有一種方法可以將此文件放在該文件夾中但不必使用default package當我把文件夾放在那里時 NetBeans 創建的。

我嘗試重構重命名默認包,但它向我顯示此錯誤Module JPA Refactoring threw java.lang.NullPointerException. Please report a bug against JPA Refactoring module and attach your var/log/messages.log. Module JPA Refactoring threw java.lang.NullPointerException. Please report a bug against JPA Refactoring module and attach your var/log/messages.log.

我的最終項目結構如下所示

MyWebAppProjectName
--Web Pages
  --WEB-INF
    --jsp
         index.jsp
    --resources
      --js
         js.js
      --css
         site.css
      log4j.properties
--Source Packages
  --config
      ConfigMVC.java
      WebInitializaer.java
  --controllers
      HomeController.java
--Test Packages
--Other Resources
  --src/main/resources
    --default package
      --log4j.properties
--Dependencies
--Java Dependencies
--Project FIles

嘗試將 log4j.properties 文件移動到 ./WEB-INF/。 您的 Spring Resources 處理程序當然可以查看 ./WEB-INF/resources/。 我不相信 log4j 對 spring 一無所知,log4j 也不關心 spring。 Log4j 將在類路徑中查找屬性文件,除非您明確告訴 log4j 查找其他地方。

我想現在,你只是告訴春天去哪里找東西。

我相信這是違反您期望的 log4j.properties 文件的無效放置。 您可以查看此堆棧文章中有關log4j-properties-file-where-to-put-it的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM