【问题标题】:Eclipse not recognizing slf4j or logback Logger class methodsEclipse 无法识别 slf4j 或 logback Logger 类方法
【发布时间】:2013-07-20 19:42:04
【问题描述】:

我最近的任务是开始构建一个新的 Spring 3 MVC 项目(在这方面我是个菜鸟)。在 Kepler 中设置了大部分 POC 项目后,我有:

  • 一个可部署的原型 webapp(HelloWorld 风格) 在(外部)Tomcat7 中工作。
  • 已配置 Logback 并向控制台报告:
... 12:46:21.916 [http-apr-8080-exec-5] TRACE o.s.w.s.v.InternalResourceViewResolver - 缓存视图 [home] 12:46:21.916 [http-apr-8080-exec-5] 调试 o.s.web.servlet.DispatcherServlet - 渲染视图 [org.springframework.web.servlet.view.JstlView: name 'home';名称为“sample”的 DispatcherServlet 中的 URL [/WEB-INF/view/home.jsp]] 12:46:21.916 [http-apr-8080-exec-5] TRACE o.s.web.servlet.view.JstlView - 使用模型 {name=lingxotika.org} 和静态属性 {} 呈现名称为“home”的视图 12:46:21.916 [http-apr-8080-exec-5] 调试 o.s.web.servlet.view.JstlView - 添加了类型为 [java.lang.String] 的模型对象“名称”以在视图中请求名称为“home” 12:46:21.921 [http-apr-8080-exec-5] 调试 o.s.web.servlet.view.JstlView - 转发到 InternalResourceView 'home' 中的资源 [/WEB-INF/view/home.jsp] 12:46:21.957 [http-apr-8080-exec-5] TRACE o.s.web.servlet.DispatcherServlet - 清除线程绑定请求上下文:org.apache.catalina.connector.RequestFacade@1bb3db1b 12:46:21.960 [http-apr-8080-exec-5] 调试 o.s.web.servlet.DispatcherServlet - 成功完成请求 12:46:21.960 [http-apr-8080-exec-5] TRACE o.s.w.c.s.AnnotationConfigWebApplicationContext - 在命名空间“sample-servlet”的 WebApplicationContext 中发布事件:ServletRequestHandledEvent: url=[/codetutr/home/];客户端=[127.0.0.1];方法=[GET]; servlet=[示例];会话=[0108E781644C1268FD92C11BD78888FB];用户=[空];时间=[87ms];状态=[确定]
  • 但是当我进入我的代码以使用Logger 类方法时(我都尝试过 org.slf4j.Loggerch.qos.logback.classic 口味),Eclipse 无法识别 Logger 实例中的方法:

    package org.lingxotika.controller;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;

    @Controller
    public class SampleController {
        static final Logger log = LoggerFactory.getLogger(SampleController.class);

        log.info("Hit Controller...");    // Error is here

        @RequestMapping("home")
        public String loadHomePage(Model model) {
            model.addAttribute("name", "lingxotika.org");
            return "home";
        }
    }

输入 log. 后的 Eclipse Code Assist 显示以下选项(抱歉,还不能发布屏幕截图):

new - create new object
nls - non-externalized string marker
runnable - runnable
toarray - convert collection to array

总之,我已经看到了 herehere 的示例,这表明这不是 Spring 的限制或我承认缺乏对它的能力,而是一个我忽略的 Eclipse 问题。我避免发布可能不相关的信息,但很乐意提供任何进一步的代码、日志或配置示例。任何帮助将不胜感激。

【问题讨论】:

  • 我应该补充一点,我已经执行了必要的Project -> Clean/RefreshMaven -> Update Project...,重新启动 Eclipse,重新启动我的笔记本电脑,吹走并重新导入项目,然后 @987654332 @/mvn eclipse:eclipse -Dwtpversion=2.0.

标签: eclipse spring-mvc slf4j logback


【解决方案1】:

您的项目中似乎没有 slf4j api jar。

因为它在 tomcat 中工作,所以也许 tomcat 正在使用“提供”的 jar,即:作为 tomcat 应用程序一部分的一个。

如果你使用的是maven,你的pom中需要有以下依赖:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

【讨论】:

  • 我相信我拥有所有需要的依赖项(我正在使用 Maven),因为没有其中任何一个,与处理程序的绑定在某处失败并且资源对 Tomcat 不可用。我非常倾向于这是一个 IDE 问题,例如构建路径错误配置等。
  • 你在tomcat中运行时看到log.info("Hit Controller...")吗?
  • 否,因为info 不是 Logger 实例中的方法,所以项目无法编译(尽管编译器对 static final Logger log = LoggerFactory.getLogger(SampleController.class); 行没有问题...)。跨度>
  • 您是否尝试将 log.info() 放在方法内部而不是类级别?
  • 太棒了,这当然奏效了。:) 再一次证明了第二双眼睛的价值。只要我的代表足够高,我就会投票赞成你的答案。感谢您的帮助。
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 2019-08-12
  • 2014-02-25
  • 1970-01-01
  • 2013-11-18
  • 2012-04-19
相关资源
最近更新 更多