当前位置: 首页 > 知识库问答 >
问题:

日食无法识别 slf4j 或日志回溯记录器类方法

翟越
2023-03-14

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

  • 一个原型Web应用程序(HelloWorld样式),可以部署并在(外部)Tomcat7中工作。
  • 已配置日志并报告给控制台:
...
12:46:21.916 [http-apr-8080-exec-5] TRACE o.s.w.s.v.InternalResourceViewResolver - Cached view [home]
12:46:21.916 [http-apr-8080-exec-5] DEBUG o.s.web.servlet.DispatcherServlet - Rendering view [org.springframework.web.servlet.view.JstlView: name 'home'; URL [/WEB-INF/view/home.jsp]] in DispatcherServlet with name 'sample'
12:46:21.916 [http-apr-8080-exec-5] TRACE o.s.web.servlet.view.JstlView - Rendering view with name 'home' with model {name=lingxotika.org} and static attributes {}
12:46:21.916 [http-apr-8080-exec-5] DEBUG o.s.web.servlet.view.JstlView - Added model object 'name' of type [java.lang.String] to request in view with name 'home'
12:46:21.921 [http-apr-8080-exec-5] DEBUG o.s.web.servlet.view.JstlView - Forwarding to resource [/WEB-INF/view/home.jsp] in InternalResourceView 'home'
12:46:21.957 [http-apr-8080-exec-5] TRACE o.s.web.servlet.DispatcherServlet - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@1bb3db1b
12:46:21.960 [http-apr-8080-exec-5] DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request
12:46:21.960 [http-apr-8080-exec-5] TRACE o.s.w.c.s.AnnotationConfigWebApplicationContext - Publishing event in WebApplicationContext for namespace 'sample-servlet': ServletRequestHandledEvent: url=[/codetutr/home/]; client=[127.0.0.1]; method=[GET]; servlet=[sample]; session=[0108E781644C1268FD92C11BD78888FB]; user=[null]; time=[87ms]; status=[OK]
  • 但是当我进入我的代码使用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 代码助手显示以下选项(抱歉,尚无法发布屏幕截图):

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

总之,我在这里和这里看到的例子表明,这并不是Spring的局限性,也不是我承认的缺乏能力,而是我忽略的Eclipse问题。我避免发布可能不相关的信息,但我很乐意提供进一步的代码、日志或配置示例。任何帮助都将不胜感激。

共有1个答案

宗政唯
2023-03-14

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

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

如果您使用的是maven,您需要在pom中拥有以下依赖项:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
 类似资料:
  • 在我的Java应用程序中,我使用SLF4J+Logback进行日志记录。我在开发环境中使用调试级日志记录,在生产环境中使用错误级日志记录。但是有一些消息我无论如何都想要记录下来,无论日志级别如何(类似于,但使用的是logger)。 有什么切实可行的方法可以实现这一点吗?我可以使用error或更低的级别,但我想做的是给出一些信息,所以在语义上是错误的,它不是错误。 我可以在我的中为我的类定义另一个记

  • 我有以下代码: 在日志中,我只能看到来自BClass而不是AClass的字段: 17:52:28.151[main]INFO Main-Main. BClass(金额=12) 但是我想查看所有BClass字段,包括父类中的字段(标题字段)。我该怎么做?

  • 我在一个类中创建了3个不同的slf4j记录器: 奇怪的是,即使在调试级别配置了X.Y.Z.MyClass,MyClass-a和MyClass-b记录器也不是在调试级别记录日志,而是在配置的根级别记录日志(在我的例子中是info)。如下所示,即使为-a和-b指定特定的记录器也不起作用。在我将根更改为debug之前,它们不会在debug级别进行日志记录。真的被这个难住了,有什么想法吗?

  • 在将quartz scheduler添加到项目中后,Tomcat的服务器日志会被垃圾邮件发送,并显示以下消息: [信息][talledLocalContainer]12:15:06.319[DefaultQuartzScheduler\u QuartzSchedulerThread]调试o.quartz。果心QuartzSchedulerThread-批量获取0个触发器 我正在尝试禁用该日志消息,

  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 主要内容:Logger日志方法的例子,Logger的日志方法Logger 类有多种方法来处理日志记录活动。Logger 类不允许我们实例化一个新的 Logger 实例,但它支持两种获取 Logger 对象的静态方法: 两个方法中的第一个返回应用程序实例的根记录器,它没有名称。 任何其他命名的 Logger 对象实例都是通过传递记录器的名称由第二种方法获得的。记录器的名称可以是您传递的任何字符串,通常是类或包名称,如下所述: Logger日志方法的例子 Lo