相信大家都经历过线上项目随着时间推移用户增加等,日志文件越来越大,导致编辑器都无法打开,给查找排查带来很多不便,今天就简单分享一下日志按天切割的办法,希望对你有用
1.tomcat部署的web项目
在log4j.properties配置中添加如下配置
log4j.rootLogger = INFO, A1, D, D1 ######ConsoleAppender############### log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d %p %c.%M():%L - %m%n #######DailyRollingFileAppender - INFO################## log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = ${catalina.base}/log/log log4j.appender.D.Threshold = DEBUG log4j.appender.D.DatePattern = '.'yyyy-MM-dd'.log' log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern=%d %p %c.%M():%L - %m%n #######DailyRollingFileAppender - ERROR################## log4j.appender.D1 = org.apache.log4j.DailyRollingFileAppender log4j.appender.D1.File = ${catalina.base}/log/error log4j.appender.D1.Threshold = ERROR log4j.appender.D1.DatePattern = '.'yyyy-MM-dd'.log' log4j.appender.D1.layout = org.apache.log4j.PatternLayout log4j.appender.D1.layout.ConversionPattern=%d %p %c.%M():%L - %m%n
没有太难的配置,有些开发经验的一眼都能看明白,就不细说了
2.springBoot项目
现在单体大型应用越来越少,springboot无处不在,下面是boot的日志切割存储
1)引入log4j依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId>crm-api <version>2.17.1</version> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.17.1</version> </dependency>
2)yml配置
logging: level: com.alibaba.nacos.client.naming: error #错误日志 com.xxx.xxxx: DEBUG #业务日志 org.hibernate.SQL: DEBUG #SQL打印 file: path: /data/logs/${spring.application.name} #存放路径
3)调整logback配置文件
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <springProperty scope="context" name="LOG_PATH" source="logging.file.path"/> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:- %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:- %5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}) {cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:- yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="FILE_LOG_ACTION_PATTERN" value="${FILE_LOG_ACTION_PATTERN:- %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!-- 控制台日志 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- 全量日志 --> <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder><pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <file>${LOG_PATH}/all.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/all.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern> <maxFileSize>${LOG_FILE_MAX_SIZE:-50MB}</maxFileSize> <maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory> </rollingPolicy> </appender> <!-- 错误日志 --> <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <file>${LOG_PATH}/err.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/err.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern> <maxFileSize>${LOG_FILE_MAX_SIZE:-50MB}</maxFileSize> <maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory> </rollingPolicy> <!-- 过滤出ERROR级别的日志 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 访问日志 --> <appender name="FILE_LOG_ACTION" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>${FILE_LOG_ACTION_PATTERN}</pattern> </encoder> <file>${LOG_PATH}/action.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/action.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern> <maxFileSize>${LOG_FILE_MAX_SIZE:-50MB}</maxFileSize> <maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory> </rollingPolicy> </appender> <!-- 日志总开关 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE_ALL" /> <appender-ref ref="FILE_ERROR" /> </root> <logger name="ActionLog" level="INFO" additivity="false"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE_LOG_ACTION" /> </logger> <!-- 日志过滤 --> <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/> <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/> <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/> <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/> <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/> <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/> <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/> </configuration>