spring - 如何仅将一些信息保存到 .log 文件
问题描述
我正在尝试设置日志记录。我有一个类 LoginAttemptService,我希望只有此类的日志才会存储在日志中。
@Service
public class LoginAttemptService {
private final int MAX_ATTEMPT = 5;
private LoadingCache<String, Integer> attemptsCache;
private Logger logger = LoggerFactory.getLogger(LoginAttemptService.class);
public void loginSucceeded(String username, String key) {
attemptsCache.invalidate(key);
logger.info("Successful login: " + username + " ip address:" + key);
}
应用属性:
logging.file = logfile.log
现在的问题是,所有内容都保存到该文件中......不仅登录尝试
编辑:我使用以下配置在我的类路径中创建了 logback.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<appender name="login" class="ch.qos.logback.core.FileAppender">
<file>log1.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.patrikmaryska.bc_prace.bc_prace.service.LoginAttemptService" level="info" additivity="false">
<appender-ref ref="login"/>
</logger>
</configuration>
但它现在仍然保存到该文件中......
解决方案
您应该将 logback.xml 添加到您的资源并配置 appender。
并使用以下记录器:
@Service
public class LoginAttemptService {
private final int MAX_ATTEMPT = 5;
private LoadingCache<String, Integer> attemptsCache;
private static Logger loginLogger = LoggerFactory.getLogger("login");
public void loginSucceeded(String username, String key) {
attemptsCache.invalidate(key);
loginLogger.info("Successful login: " + username + " ip address:" + key);
}
logback.xml:
<configuration>
<property name="LOGS_HOME" value="./logs/"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<appender name="LOGIN-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS_HOME}login.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOGS_HOME}login.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="login" level="info" additivity="false">
<appender-ref ref="LOGIN-LOG"/>
<appender-ref ref="STDOUT"/>
</logger>
<root level="error">
<appender-ref ref="LOGIN-LOG"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>
推荐阅读
- c - 为什么直接给出字符串和读取字符串时strlen返回不同的值?
- ios - 如何使用 Macaw iOS 库从 url 显示 svg
- python - 加入数据框的过滤器在 pyspark 中不起作用
- java - 将 JSON ListView 转换为 Fragment
- windows - 如何修复我在 Windows 中遇到的这个 JMeter LoggerAppender 错误?
- python - Python:如何动态更新多个变量/字段
- scala - 如何在 Gatling 中创建基本的分页逻辑?
- java - 如何在 laravel 中返回 Content 类型?
- kotlin - 带有 Java 超类的 Kotlin 数据类
- c++ - GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd