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";}