Log4j日志处理-----长文

Log4j日志处理-----长文,第1张

Log4j日志处理-----长文

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

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

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

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


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

log4j使用方法

一、引入jar包

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

        
            log4j
            log4j
            1.2.17
        
二、配置文件 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.配置文件编写

输出方式 :

         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

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5669474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存