【问题标题】:Logging from SpringMVC controller从 SpringMVC 控制器记录
【发布时间】:2010-01-02 17:40:00
【问题描述】:

我刚刚开始探索 SpringMVC 和 logback。

这是我的控制器,(到目前为止我只有一个)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class IndexController {

    protected final static Logger logger = LoggerFactory.getLogger(IndexController.class);

    @RequestMapping("/index")
    public ModelAndView index() {
        logger.info("Returning index view");
        return new ModelAndView("index");
    }
}

这是上面的测试代码。

import org.junit.Test;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertEquals;

import org.springframework.web.servlet.ModelAndView;

public class IndexControllerTest {

    @Test
    public void index() throws Exception {
        IndexController iController = new IndexController();
        ModelAndView modelAndView = iController.index();

        assertNotNull(modelAndView.getModel());
        assertEquals("index", modelAndView.getViewName());
    }
}

我有 logback 设置以使用 FixedWindowRollingPolicy 登录文件,配置是,

<configuration>
    <appender name="FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>logFile.log</File>
        <RollingPolicy
            class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>logFile.%i.log</FileNamePattern>
            <MinIndex>1</MinIndex>
            <MaxIndex>3</MaxIndex>
        </RollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>5MB</MaxFileSize>
        </triggeringPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %-26(%d{HH:mm:ss,SSS} [%thread]) %-5level %logger{32} - %msg%n
            </Pattern>
        </layout>
    </appender>
    <root level="info">
        <appender-ref ref="FILE" />
    </root>
</configuration>

我现在遇到的问题是,从浏览器访问站点时,日志文件中没有创建任何条目。我假设调用控制器,随后返回浏览器中显示的视图,因此应该在显示视图之前调用 log 方法。但是什么也没发生。

但是,在运行测试时,日志记录按预期工作,并且我在日志文件中有“返回索引视图”的特定条目。

非常感谢有关上述情况的任何帮助或指导。

编辑: 目前使用tomcat6和apache。

logback配置文件,logback.xml直接放在src(默认包)下。 正如我在部署后检查过的那样,它被复制到 WEB-INF/classes/

【问题讨论】:

  • 您在哪个容器中运行控制器?
  • 你的 logback 配置文件放在哪里?
  • 我正在使用 tomcat6 和 apache。编辑问题以添加信息
  • 您在WEB-INF/lib 中放入了哪些 slf4j JAR? SLF4J 运行时是否有可能选择 tomcat 的 log4j 并记录到它?检查 tomcat 日志。
  • 我检查了tomcat日志,日志条目在任何文件中都不存在,对所有文件进行了grep。 WEB-INF/lib 中唯一的 slf4j JAR 是 slf4j-api-1.5.10.jar,除此之外还有 logback-classic-0.9.18.jar 和 logback-core-0.9.18.jar。还有 commons-logging-1.1.1.jar 和其他 spring JARs

标签: java logging spring-mvc logback


【解决方案1】:

听起来可能很奇怪,但当我为 appender.File 属性使用绝对路径时,我似乎可以很好地获取日志!

<File>/home/sujoy/logFile.log</File>

以上述为例,我得到了我所期望的日志。

我不知道为什么会发生这种情况。特别是因为在测试日志时工作正常。

【讨论】:

    【解决方案2】:

    运行 Tomcat 实例的用户是否有权写入指定日志文件的位置?

    【讨论】:

    • 是权限不是问题,似乎在运行测试时netbeans直接在项目目录下创建了logFile.log,但是tomcat无法在那里登录并出现权限问题,但是,如果我提供项目目录的绝对路径,然后将 tomcat 和测试记录到同一个 logFile,没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多