logbak日志单独打印
问题
前几天朋友在群里问,怎么针对方法打印打印日志,不是针对类。
解决办法
方法层
java
@GetMapping("getLog1")
public String getLog1(){
Logger specialLogger = LoggerFactory.getLogger(TestController.class.getName() + ".getLog1");
specialLogger.info("Special log message for methodWithSpecialLogging");
return "success";
}
logback 配置文件
xml
<logger name="com.test.controller.TestController.getLog1" level="INFO">
<appender-ref ref="getLog1" />
</logger>
<appender name="getLog1" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/getLog.%d{yyyy-MM-dd-HH}.%i.log</fileNamePattern>
<MaxHistory>10</MaxHistory>
<maxFileSize>200MB</maxFileSize>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} %-5level [%X{REQUEST_IP}][%X{TRACE_ID}][%thread][%file:%line] : %msg%n
</pattern>
</encoder>
</appender>
这一步已经做到根据方法打印log日志,但是朋友的具体需求竟然是针对每调用一次方法,生成一个配置文件
直接在方法层实现
每调用一次,输出一份文件
java
@GetMapping("getLog")
public String getLog(){
// 创建新的 Logger 实例
Logger logger = LoggerFactory.getLogger(TestController.class);
// 获取 Logger 的上下文
ch.qos.logback.classic.Logger logbackLogger = (ch.qos.logback.classic.Logger) logger;
ch.qos.logback.classic.LoggerContext loggerContext = logbackLogger.getLoggerContext();
// 设置该 Logger 实例的 Appender,即日志输出到单独的文件中
ch.qos.logback.core.FileAppender<ch.qos.logback.classic.spi.ILoggingEvent> fileAppender = new ch.qos.logback.core.FileAppender<>();
fileAppender.setFile("path/getLog_" + System.currentTimeMillis() + ".log");
fileAppender.setContext(loggerContext);
fileAppender.start();
// 将 Appender 添加到 Logger 实例中
logbackLogger.addAppender(fileAppender);
// 设置日志级别
logbackLogger.setLevel(Level.INFO);
// 输出日志
logger.info("Special log message for methodWithSpecialLogging");
return "success";
}