在一个系统中一般都是需要记录系统日志的。一方面是对系统运行和用户访问的记录,还有一方面是方便对于问题或错误的排查。一般来说将所有的日志输出到一个文件中这并没有什么问题,直到遇到这样一个需求:有一些接口请求的日志需要单独记录在一个日志文件中,方便以后统计或者查看。
所以我们需要这样来做,一方面原有的日志记录保持不变,另一方面我们对日志模块稍加改动,来将我们需要的日志单独保存。(可以简单理解为两个用户,第一个用户记录系统的日志,第二个用户记录特定的日志)
1.首先配置好正常的日志文件(logback.xml)
2.在logback.xml中添加我们定义的日志输出模块
//不同业务日志记录到不同的文件
<appender name="zhangsanAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>logs/业务A.log</File>
<append>true</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/业务A.%d.%i.log</fileNamePattern>
<maxHistory>90</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy/MM/dd HH:mm:ss.SSS} %-5level [%thread] [%c{0}:%L] : %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
//这是我们定义的访问日志传入的名称
<logger name="zhangsanLog" additivity="false" level="INFO">
<appender-ref ref="zhangsanAppender"/>
</logger>
3.调用格式
//正常的日志声明
private final Logger logger= LoggerFactory.getLogger(this.getClass());
//记录特定日志的声明
private final Logger newLogger = LoggerFactory.getLogger("zhangsanLog");
//正常的日志存储
logger.info("查看汽车的用户: " + phone);
//特定的日志存储
newLogger.info("查看宝马汽车的用户: " + phone);
这样特定的日志就会按照第二步中的文件路径进行单独存储。