问题:解决springBoot,等java语言,存放至服务器导致日志越来越大,以至于占满整个磁盘的问题。

测试服务,突然挂掉,为什么?

仔细一看,磁盘满了,上图为修复后的,当时可用为0,已用为100%。通过挨个ll -h发现

日志文件居然持续写入到了7个T。才3天没见就7个T了。删除后,停用程序恢复正常。


解决方式:通过log4j(日志管理工具),对程序的所有日志进行管理,只保留新日志。

log4j使用方法

一、引入jar包

咱们要使用它,那么肯定得先有log4j,下面为log4j的pom依赖(推荐用1,2目前有严重漏洞)

        <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

二、配置文件

1.创建配置文件

在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.配置文件编写

直接复制可用

# 设置
log4j.rootLogger = stdout,E,LogFile# 输出信息到控制台
log4j.appender.LogFile = org.apache.log4j.RollingFileAppender
log4j.appender.LogFile.layout = org.apache.log4j.PatternLayout
#log4j.appender.LogFile.File =E://logs/log.log
log4j.appender.LogFile.File =/hadoop/logs/car_log.log
log4j.appender.LogFile.Append = true
log4j.appender.LogFile.Threshold = INFO
log4j.appender.LogFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
log4j.appender.LogFile.Encoding=UTF-8
log4j.appender.LogFile.MaxFileSize=10kb
log4j.appender.LogFile.MaxBackupIndex=3# 输出ERROR 级别以上的日志到文件E://logs/error.log
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.E.File =E://logs/error.log
log4j.appender.E.File =/hadoop/logs/car_error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

代码中使用(执行的代码中)

InitLogRecord.initLog();
Logger log1 = Logger.getLogger(TDengineGPS.class);
log1.info("请求的结果"+respnseJsonCar);

输出方式 :

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 Logger log1 = Logger.getLogger("log1");public static void main(String[] args) {SpringApplication.run(Log4jStudyDemoApplication.class, args);
//        核心,初始化类调用(告诉他,log4j是哪个配置文件)InitLogRecord.initLog();
//        创建log对象//        打印log1.info("hahaha");log1.error("sss");//如果你要捕获异常则try(){代码}catch(Exception e){log1.error(e.getMessage());}}}

场景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

2021年12月27日,补充

linux系统和idea中的不一样,切记打包后要单独指向这个配置文件。

另外,避免多余的

我这里的输出目标,依次是DEBUG模式,控制台,文件输出。

只保留LOGFILE(你需要的) ,其他如果你没有配置则会报错。

Log4j日志处理-----长文相关推荐

  1. log4j中调试与错误日志分开_idea中log4j日志插件报错

    visual studio code权威指南计算机 65.34元 包邮 (需用券) 去购买 > idea中log4j日志插件报错 在运行测试代码的时候,出现以下错误! 在 src/ main / ...

  2. java自定义日志级别_自定义log4j日志级别

    因为项目中需要输出一些特别的日志来做数据统计.如果开启log4j提供的INFO日志级别,每天生成的日志文件就会变得越来越大.这样就得写个定 时任务来删除这个文件.为了只输出所需的日志级别,唯有自己定义 ...

  3. linux日志文件存放目录,Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法

    log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一.场景和需求 假设我现在有3个独立的用project(暂时用maven关联起 ...

  4. flume可以实时监控mysql嘛_flume使用(三):实时log4j日志通过flume输出到MySql数据库...

    本文在[flume使用(二):采集远程日志数据到MySql数据库]一文基础之上进行测试操作.本文使用到的: flume版本.jdk版本.mysql.数据库表.javaBean.自定义的mysqlSin ...

  5. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题

    转载自   Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题 使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论 ...

  6. log4j 日志配置

    Log4j教程 - Log4j安装 Log4j API包是根据Apache软件许可证分发的. 最新的log4j版本,包括全源代码,类文件和文档可以在http://logging.apache.org/ ...

  7. Hibernate Log4j日志记录

    Hibernate Log4j日志记录 欢迎来到Hibernate Log4j Logging示例.Hibernate 4在旧的hibernate版本中使用JBoss日志而不是slf4j.今天我们将研 ...

  8. 解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以及tomcat日志乱码]

    解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以及tomcat日志乱码] 参考文章: (1)解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以 ...

  9. 智能一代云平台(三十三):log4j日志研究

    [前言] 日志对于一个系统的来说是必不可少,它可以让人们知道,系统当前运行的状况:最近对日志进行了一些实践,以下是自己在这个过程中收获的一些东西. [一些有趣的实验]          一.mybat ...

最新文章

  1. Android架构篇-3 网络接口封装
  2. 网络基础---物理层
  3. BigDecimal运算的工具类
  4. 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档
  5. kubernetes集群搭建
  6. WinForm中ComboBox绑定数据的用法
  7. Mac如何修复“无法卸载磁盘”错误
  8. iOS开发之模拟器(simulator)的复制粘贴
  9. 递归函数php啥意思,php递归函数如何用才有效?php递归函数例子
  10. p5.js 入门教程
  11. C语言如何统计程序运行时间
  12. 《留住好员工》-读后感
  13. mysql show processlist整理
  14. Tableau和BDP,哪个才是最适合中国用户的可视化分析工具?
  15. Navicat建数据库时字符集与排序规则说明
  16. 使用java实现 Excel在线预览
  17. mysql中调用多个表_MySQL 多表查询
  18. Windows2000高级技巧
  19. 一分钟带你了解最真实的服务器
  20. kafka集群配置之kafka启动了创建topic报错:Replication factor: 1 larger than avail

热门文章

  1. 亲测有效的免费数据恢复方法持更
  2. 用条码标签打印软件批量打印物料标签 1
  3. frps和frps的使用
  4. iphone x php兼容吗,关于iphoneX 适配客户端H5页面的问题
  5. 文字图片转换成word文档的方法?
  6. 调节e18-d80nk的测量距离_新一代验光机单眼调节幅度的客观测量重复性
  7. 数据结构 耿国华老师讲
  8. 普京称:一旦美国向乌提供爱国者防空系统,俄罗斯将100% 摧毁它们,如何解读其表态?...
  9. 网络基础 TCP/IP协议面试常问知识点
  10. 基于python nlp PyTorch智能对联生成系统 附完整代码 毕业设计