查看: 408|回复: 4

干货: 论初始化log4j和自动备份log文件记录的正确姿势

[复制链接]

22

主题

126

帖子

582

积分

高级会员

Rank: 4

积分
582
发表于 2023-4-20 07:48:39 | 显示全部楼层 |阅读模式
本帖最后由 Lin-JN 于 2023-4-20 07:58 编辑

查看了很多版本的代码,发现都存在同一个毛病,就是代码很乱,而且逻辑并不清晰,全都存在同一个无伤大雅的问题。
总的来说,就是不太严谨吧。


对于不讲究的人来说没啥毛病,但对于强迫症患者,这绝不能忍!
解决方案如下:

首先 做一个log4j初始化参数

  1. import org.apache.log4j.PropertyConfigurator;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.util.Properties;

  5. /** log4j.properties 初始化配置文件 */
  6. public class initLogRecord {

  7.     private static final String _log_4j = "./config/log4j.properties";

  8.     /** 初始化 log4j 配置文件位置 */
  9.     public static void initLog4j() {
  10.         FileInputStream fileInputStream = null;
  11.         try {
  12.             Properties properties = new Properties();
  13.             fileInputStream = new FileInputStream(_log_4j);
  14.             properties.load(fileInputStream);
  15.             PropertyConfigurator.configure(properties);
  16.         } catch (Exception e) {
  17.             e.printStackTrace();
  18.         } finally {
  19.             if (fileInputStream != null) {
  20.                 try {
  21.                     fileInputStream.close();
  22.                 } catch (IOException e) {
  23.                     e.printStackTrace();
  24.                 }
  25.             }
  26.         }
  27.     }
  28. }
复制代码
然后 修改核心的启动文件 Server.java

  1.     private static final String _logInfo = "./logInfo";
  2.     private static final String _back = "./back";
复制代码
  1. CompressFile bean = new CompressFile();
  2.         File readfile;
  3.         try {
  4.             File file = new File(_back);
  5.             if (!file.exists()) {
  6.                 if (file.mkdir()) {
  7.                     System.err.println(_back + " 文件目录不存在, 已创建目录");
  8.                 } else {
  9.                     System.err.println(_back + " 文件目录创建失败");
  10.                 }
  11.             }

  12.             File logInfo_file = new File(_logInfo);
  13.             if (!logInfo_file.exists()) {
  14.                 if (logInfo_file.mkdir()) {
  15.                     System.err.println(_logInfo + " 文件目录不存在, 已创建目录");
  16.                 } else {
  17.                     System.err.println(_logInfo + " 文件目录创建失败,请检查磁盘读写权限");
  18.                 }
  19.             }
  20.             String nowDate = new SimpleDateFormat(_time).format(new Date());
  21.             // 不管是否存在记录档案 直接打包文件夹了事
  22.             bean.zip(_logInfo, _back + "/" + nowDate + ".zip");

  23.             String[] logInfo_fileList = logInfo_file.list();
  24.             if (logInfo_fileList != null) {
  25.                 for (String fileName : logInfo_fileList) {
  26.                     readfile = new File(_logInfo + "/" + fileName);
  27.                     if (readfile.exists()) { // 文件存在
  28.                         if (readfile.isDirectory()) { // 如果是文件夹目录
  29.                             System.out.println(readfile + " 是文件夹目录,对该目录不做任何处理");
  30.                             continue;
  31.                         }
  32.                         if (readfile.delete()) {
  33.                             System.out.println(readfile + " 记录文件删除成功,稍后初log4j始化会自动创建");
  34.                         } else {
  35.                             System.err.println(readfile + " 文件删除失败,请检查磁盘读写权限");
  36.                         }
  37.                     }
  38.                 }
  39.             } else {
  40.                 System.err.println(_logInfo + " 文件目录下没有文件,稍后初始化log4j配置文件自动创建");
  41.             }
  42.         } catch (IOException e) {
  43.             System.err.println("log4j 相关文件目录处理失败,请检查磁盘读写权限或文件名格式是否正式");
  44.         } finally { // 无论是否中断 finally 块的语句都会执行
  45.             initLogRecord.initLog4j(); // 初始化 log4j 配置文件位置
  46.         }
复制代码
文件名格式: 一般出错,极大可能是压缩包创建时的文件名格式出错 必须是对应系统所能识别的格式

这段放在 main 方法最前面即可

广告: 圣子默默的个人空间_哔哩哔哩_bilibili

回复

使用道具 举报

0

主题

228

帖子

1384

积分

金牌会员

Rank: 6Rank: 6

积分
1384
发表于 2023-4-29 13:03:29 | 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

0

主题

9

帖子

19

积分

注册会员

Rank: 2

积分
19
发表于 2023-12-25 12:51:08 | 显示全部楼层
看不懂 好东西
回复 支持 反对

使用道具 举报

0

主题

16

帖子

151

积分

中级会员

Rank: 3Rank: 3

积分
151
发表于 2024-1-15 09:32:39 来自手机 | 显示全部楼层
活捉大佬,{:12:}
回复 支持 反对

使用道具 举报

0

主题

108

帖子

112

积分

中级会员

Rank: 3Rank: 3

积分
112
发表于 2024-1-23 17:31:39 | 显示全部楼层
谢谢大鹅的教学,mark一下
import org.apache.log4j.PropertyConfigurator;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

/** log4j.properties 初始化配置文件 */
public class initLogRecord {

    private static final String _log_4j = "./config/log4j.properties";

    /** 初始化 log4j 配置文件位置 */
    public static void initLog4j() {
        FileInputStream fileInputStream = null;
        try {
            Properties properties = new Properties();
            fileInputStream = new FileInputStream(_log_4j);
            properties.load(fileInputStream);
            PropertyConfigurator.configure(properties);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
复制代码
然后 修改核心的启动文件 Server.java

    private static final String _logInfo = "./logInfo";
    private static final String _back = "./back";
复制代码
CompressFile bean = new CompressFile();
        File readfile;
        try {
            File file = new File(_back);
            if (!file.exists()) {
                if (file.mkdir()) {
                    System.err.println(_back + " 文件目录不存在, 已创建目录");
                } else {
                    System.err.println(_back + " 文件目录创建失败");
                }
            }

            File logInfo_file = new File(_logInfo);
            if (!logInfo_file.exists()) {
                if (logInfo_file.mkdir()) {
                    System.err.println(_logInfo + " 文件目录不存在, 已创建目录");
                } else {
                    System.err.println(_logInfo + " 文件目录创建失败,请检查磁盘读写权限");
                }
            }
            String nowDate = new SimpleDateFormat(_time).format(new Date());
            // 不管是否存在记录档案 直接打包文件夹了事
            bean.zip(_logInfo, _back + "/" + nowDate + ".zip");

            String[] logInfo_fileList = logInfo_file.list();
            if (logInfo_fileList != null) {
                for (String fileName : logInfo_fileList) {
                    readfile = new File(_logInfo + "/" + fileName);
                    if (readfile.exists()) { // 文件存在
                        if (readfile.isDirectory()) { // 如果是文件夹目录
                            System.out.println(readfile + " 是文件夹目录,对该目录不做任何处理");
                            continue;
                        }
                        if (readfile.delete()) {
                            System.out.println(readfile + " 记录文件删除成功,稍后初log4j始化会自动创建");
                        } else {
                            System.err.println(readfile + " 文件删除失败,请检查磁盘读写权限");
                        }
                    }
                }
            } else {
                System.err.println(_logInfo + " 文件目录下没有文件,稍后初始化log4j配置文件自动创建");
            }
        } catch (IOException e) {
            System.err.println("log4j 相关文件目录处理失败,请检查磁盘读写权限或文件名格式是否正式");
        } finally { // 无论是否中断 finally 块的语句都会执行
            initLogRecord.initLog4j(); // 初始化 log4j 配置文件位置
        }
复制代码
文件名格式: 一般出错,极大可能是压缩包创建时的文件名格式出错 必须是对应系统所能识别的格式

这段放在 main 方法最前面即可

广告: 圣子默默的个人空间_哔哩哔哩_bilibili

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表