logbak日志单独打印
问题
前几天朋友在群里问,怎么针对方法打印打印日志,不是针对类。
解决办法
方法层
@GetMapping("getLog1")public String getLog1(){Logger specialLogger = LoggerFactory.getLogger(TestController.class.getName() + ".getLog1");specialLogger.info("Special log message for methodWithSpecialLogging");return "success";}
logback 配置文件
<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日志,但是朋友的具体需求竟然是针对每调用一次方法,生成一个配置文件
直接在方法层实现
每调用一次,输出一份文件
@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";}