日志文件没有被创建
来源: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>--> <!-- <!– 配置拦截的请求 –>--> <!-- <!–path="/**"表示拦截所有请求–>--> <!-- <mvc:mapping path="/restful/**"/>--> <!-- <!– 配置不拦截的请求 –>--> <!-- <!–exclude-path="/**"表示不拦截所有请求–>--> <!-- <!–exclude-path="/**.ico"是表示不拦截ico文件 –>--> <!-- <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"/>--> <!-- <!–bean class= 配置拦截器的类–>--> <!-- <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;
}
}这是目前老师能够查找到的解决方案,很抱歉不能确定解决同学的问题。
祝学习愉快~
相似问题