我正在使用 Spring MVC 4.2.5.RELEASE
开发 Maven Web 应用程序,我正在使用 Netbeans
IDE 和 GlassFishSErver 4.1
,我想使用 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
@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
的包,但当我执行此操作时,它停止工作并再次显示错误,因此有一种方法可以将此文件放入该文件夹中,但不必使用当我将文件夹放入其中时 NetBeans 创建的默认包
。
我尝试重构重命名默认包,但它向我显示此错误Module JPA Refactoring 引发了 java.lang.NullPointerException。请报告针对 JPA 重构模块的错误并附上您的 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 资源处理程序当然可以查看 ./WEB-INF/resources/。我不相信log4j对spring一无所知,log4j也不关心spring。 Log4j 将在类路径中查找属性文件,除非您明确告诉 log4j 在其他地方查找。
我想现在,你只是告诉 spring 去哪里寻找东西。
关于java - 如何在使用 Java 注释配置并使用 log4j.properties 文件的 Spring Mvc 应用程序中配置 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36143287/