问题:解决springBoot,等java语言,存放至服务器导致日志越来越大,以至于占满整个磁盘的问题。
测试服务,突然挂掉,为什么?
仔细一看,磁盘满了,上图为修复后的,当时可用为0,已用为100%。通过挨个ll -h发现
日志文件居然持续写入到了7个T。才3天没见就7个T了。删除后,停用程序恢复正常。
解决方式:通过log4j(日志管理工具),对程序的所有日志进行管理,只保留新日志。
log4j使用方法 一、引入jar包咱们要使用它,那么肯定得先有log4j,下面为log4j的pom依赖(推荐用1,2目前有严重漏洞)
二、配置文件 1.创建配置文件log4j log4j1.2.17
在maven项目中resources下,创建一个lo4j.properties的文件
然后我这边写了个初始化的类,用于帮助他找到配置文件(打成jar包后,建议将日志文件单独存存放在jar外头)
package com.example.log4jstudydemo.sa12; import org.apache.log4j.PropertyConfigurator; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public class InitLogRecord { public static void initLog() { FileInputStream fileInputStream = null; try { Properties properties = new Properties(); fileInputStream = new FileInputStream("src/main/resources/log4j.properties"); properties.load(fileInputStream); PropertyConfigurator.configure(properties); } catch (Exception e) { e.printStackTrace(); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }2.配置文件编写
输出方式 :
org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
百分比的含义:
%c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的位置(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)
%d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该log信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
下列举例实际场景
专门给大伙,创建了一个springBoot的项目用来一起学习。
场景1:将日志打印到控制台。(1)配置:是换行
#表示log4j的输出目标(我这里有个stdout,代表的是我第4、5行等含他的配置会被使用) log4j.rootLogger=DEBUG, stdout # 下面2行是打印到控制台(console) log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #定义log4j的格式,d%为时间后面的括号为具体时间 #%数字p为输出优先级(DEBUG,INFO,WARN,ERROR,FATAL) #[%t]代表的是哪个线程产生的这个日志(在main方法里面跑的就是主线程) 后面的-是字符串 #%m代表具体输出的日志"log.info(这里面就是m的内容)",n%代表换行 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %4p [%t] - %m%n
(2) 代码:
@SpringBootApplication public class Log4jStudyDemoApplication { public static void main(String[] args) { SpringApplication.run(Log4jStudyDemoApplication.class, args); // 核心,初始化类调用(告诉他,log4j是哪个配置文件) InitLogRecord.initLog(); // 创建log对象 Logger log1 = Logger.getLogger("log1"); // 打印 log1.info("hahaha"); log1.error("sss"); } }场景2:将日志打印到日志文件中
1.首先定义1个名称,我的叫做LOGFILE
2.上一个场景的配置文件中的加1个LOGFILE
3.在添加下面的配置
#下面2行是打印到文件中 log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout #将你的日志文件输送在哪个地方 log4j.appender.LOGFILE.File=E:\mylog.log #输出的日志类型 log4j.appender.LOGFILE.layout.ConversionPattern=-%p-%d{yyyy/MM/dd HH:mm:ss} -%l-%L-%m%n场景3:滚动日志(将日志写入多个文件,并且做限制)
#下面2行是打印到文件中(并且采用滚动模式) log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout #将你的日志文件输送在哪个地方,如果有新生产的文件,则会叫mylog.log1 #以此类推,直到,你下面设置的maxBackUpIndex到上限,就会只保留最新 log4j.appender.LOGFILE.File=E:\mylog.log #输出的日志类型 log4j.appender.LOGFILE.layout.ConversionPattern=-%p-%d{yyyy/MM/dd HH:mm:ss} -%m%n #指定编码格式,防止在linux,输出的中文错误有问题 log4j.appender.LOGFILE.Encoding=UTF-8 #指定超过这个大小则,生成1个新的日志文件 log4j.appender.LOGFILE.MaxFileSize=10kb #指定日志文件个数,当超过这个数,则会替换掉以前的文件,只保留新的日志文件 log4j.appender.LOGFILE.MaxBackupIndex=3
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)