随着项目的扩大,日志的记录变得更加重要,因为项目不仅是是数据库交互,更是多个模块,微服务,甚至是多个平台之间的调用,异步进行,这个时候bug的调试更加困难,更直观的方式是查看日志。
日志的方式:新手logger就可以了,虽有是log4j,之后就是Slf4j,一直到现在的Slf4j+log4j+logback的方式记录。
关于java的logger,大家可以看java 的API,大部分都有的
由于项目复杂度的提高,然后用Slf4j+log4j的方式配置:
1.maven配置pom文件:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>然后配置简单的log4j.properties就可以了
# Global logging configuration log4j.rootLogger=DEBUG, stdout,file # MyBatis logging configuration... log4j.logger.mybatis.study.start.mapper.UserMapper=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n log4j.logger.org.mybatis.=TRACE #所有文件输出 log4j.appender.file = org.apache.log4j.FileAppender log4j.appender.file.File = D://Work//workproject//neighbor//MybatisStudy//debugLog//allDEBUG.log log4j.appender.file.Encoding=UTF-8 log4j.appender.file.name = fileLogDemo log4j.appender.file. log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatproternLayout log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n log4j.appender.file.append = true由于项目的日志都在一个文件,后来每天生成一个以当天日期的日志文件,日志文件变大,导致查看不方便,甚至影响linux系统的读写的能力。所以必须更个性化的生成日志文件,并且管理日志的生成。
1.maven添加依赖:
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-all --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>2.配置相应的logback.xml配置
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true"> <!-- 应用名称 --> <property name="APP_NAME" value="logtest" /> <!--日志文件的保存路径,首先查找系统属性-Dlog.dir,如果存在就使用其;否则,在当前目录下创建名为logs目录做日志存放的目录 --> <property name="LOG_HOME" value="${log.dir:-logs}/${APP_NAME}" /> <!-- 日志输出格式 --> <property name="ENCODER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n" /> <contextName>${APP_NAME}</contextName> <!-- 控制台日志:输出全部日志到控制台 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern>${ENCODER_PATTERN}</Pattern> </encoder> </appender> <!-- 文件日志:输出全部日志到文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/output.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>0.005 MB</maxFileSize> </triggeringPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${ENCODER_PATTERN}</pattern> </encoder> </appender> <!-- 错误日志:用于将错误日志输出到独立文件 --> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${ENCODER_PATTERN}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> </appender> <!-- 独立输出的同步日志 --> <appender name="SYNC_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/sync.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${ENCODER_PATTERN}</pattern> </encoder> </appender> <logger name="file" level="DEBUG" addtivity="true"> <appender-ref ref="SYNC_FILE" /> </logger> <root> <level value="DEBUG" /> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </configuration>