日志文件没有被创建

来源:2-2 开发用户流量拦截器-2

WilliamSCohen

2023-03-04 20:33:11

你好老师,我的日志文件没有被创建麻烦帮我看一下吧,(Mac环境)

我尝试修改了logback.xml中的fileNamePattern的书写方式好像都不行

尝试过    ./TestLogs/history.%d{yyyy-MM-dd}.log

            ./var/Wlog/history.%d{yyyy-MM-dd}.log

并且打开了系统隐藏文件,也排出了被隐藏的可能


AccessHistoryInterceptor:

package com.imooc.restful.interceptor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AccessHistoryInterceptor implements HandlerInterceptor {
    private Logger logger = LoggerFactory.getLogger(AccessHistoryInterceptor.class);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        StringBuilder log = new StringBuilder();
        log.append(request.getRemoteAddr()).append("|");
        log.append(request.getRequestURI()).append("|");
        log.append(request.getHeader("User-Agent"));
        logger.info(log.toString());
        return true;
    }
}

applicationContext.xml

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 配置SpringMVC -->
    <!-- 1.开启SpringMVC注解模式 -->
    <mvc:annotation-driven>
        <!-- 配置转换器 -->
        <mvc:message-converters>
            <!-- 配置StringHttpMessageConverter -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- 2.静态资源默认servlet配置 -->
    <mvc:default-servlet-handler/>  <!-- 配置静态资源默认servlet处理 -->

    <!-- 3.扫描包 -->
    <context:component-scan base-package="com.imooc.restful"></context:component-scan>

    <mvc:cors> <!-- 配置跨域请求 -->
        <!--path: 配置拦截的请求-->
        <!--allowed-origins: 配置允许跨域的域名-->
        <!--max-age: 配置预检请求的有效期-->
        <mvc:mapping path="/restful/**"
                     allowed-origins="http://localhost:8081,http://www.imooc.com"
                     max-age="3600"
        />
    </mvc:cors>
    <!-- 配置拦截器 -->
<!--    <mvc:interceptors>-->
<!--        <mvc:interceptor>-->
<!--            &lt;!&ndash; 配置拦截的请求 &ndash;&gt;-->
<!--            &lt;!&ndash;path="/**"表示拦截所有请求&ndash;&gt;-->
<!--            <mvc:mapping path="/restful/**"/>-->
<!--            &lt;!&ndash; 配置不拦截的请求 &ndash;&gt;-->
<!--            &lt;!&ndash;exclude-path="/**"表示不拦截所有请求&ndash;&gt;-->
<!--            &lt;!&ndash;exclude-path="/**.ico"是表示不拦截ico文件 &ndash;&gt;-->
<!--            <mvc:exclude-mapping path="/**.ico"/>-->
<!--            <mvc:exclude-mapping path="/**.jpg"/>-->
<!--            <mvc:exclude-mapping path="/**.js"/>-->
<!--            <mvc:exclude-mapping path="/**.gif"/>-->
<!--            <mvc:exclude-mapping path="/**.css"/>-->
<!--            &lt;!&ndash;bean class= 配置拦截器的类&ndash;&gt;-->
<!--            <bean class="com.imooc.restful.interceptor.MyInterceptor"/>-->
<!--        </mvc:interceptor>-->
<!--    </mvc:interceptors>-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/resources/**"/>
            <bean class="com.imooc.restful.interceptor.AccessHistoryInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>


</beans>

logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--appender是日志输出器,可以输出到控制台,文件,数据库等-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--%thread是当前线程名 %d是日期 %level是日志级别 %logger{10}是日志记录器名称,限制类名长度为10 %msg是日志消息 %n是换行符-->
            <pattern>[%thread] %d %level %logger{10} - %msg%n </pattern>
        </encoder>
    </appender>
    <!--ch.qos.logback.core.rolling.RollingFileAppender是logback提供的日志输出器-->
    <!--file是日志文件的路径,rollingPolicy是日志滚动策略,fileNamePattern是日志文件名的格式,maxHistory是日志文件的最大数量-->
    <appender name="AccessHistoryLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/accessHistory.log</file>
        <!--ch.qos.logback.core.rolling.TimeBasedRollingPolicy是logback提供的日志滚动策略,按照时间进行滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>./var/WLog/history.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!--encoder是日志编码器-->
        <encoder>
            <pattern>[%thread] %d %level %logger{10} - %msg%n </pattern>
        </encoder>
    </appender>
    <!--root是日志记录器的名称,level是日志级别,appender-ref是引用上面的appender-->
    <root level="debug">
        <appender-ref ref="console"/>
    </root>
    <!--logger是日志记录器,可以为某个包或者某个类设置日志级别-->
    <logger name="com.imooc.restful.interceptor.AccessHistoryInterceptor" level="INFO" additivity="false">
        <appender-ref ref="AccessHistoryLog"/>
    </logger>
</configuration>
写回答

1回答

好帮手慕小蓝

2023-03-05

同学你好,很抱歉,老师这边没有办法使用Mac环境进行测试,只能通过现有资料尝试尽量帮助同学进行解决:

同学可以尝试在配置文件的appender前加入:

<define name="log.path"
            class="自定义配置类的全限定名,例如com.imooc.config.DynamicProperty">
</define>

然后将日志输出appender的内容替换为:

<appender name="AccessHistoryLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
	<file>${log.path}/accessHistory.log</file>
	<!--ch.qos.logback.core.rolling.TimeBasedRollingPolicy是logback提供的日志滚动策略,按照时间进行滚动-->
	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxHistory>7</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1gb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
	<!--encoder是日志编码器-->
	<encoder>
		<pattern>[%thread] %d %level %logger{10} - %msg%n </pattern>
	</encoder>
</appender>

然后在项目中加入如下配置类:

public class DynamicProperty implements PropertyDefiner{
public DynamicProperty() {}
public String getPropertyValue(){
String appName = EnvironmentManager.getAppName();
return "/Users/imooc/Desktop/log/"+ appName;
}
}

这是目前老师能够查找到的解决方案,很抱歉不能确定解决同学的问题。

祝学习愉快~


0

0 学习 · 9886 问题

查看课程