V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luxinfl
V2EX  ›  程序员

在运行期间删除日志文件, log4j 还能自动生成文件么?

  •  
  •   luxinfl · 2021-03-01 17:32:59 +08:00 · 2615 次点击
    这是一个创建于 1367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不能重启。是不是要搞个定时任务检测文件是否存在? 另外要吐槽下测试,可靠性测试为什么会有这种测试场景??

    第 1 条附言  ·  2021-03-01 19:18:53 +08:00
    springboot 的 logback 应该都是同一个原理吧
    第 2 条附言  ·  2021-03-02 13:57:32 +08:00
    https://stackoverflow.com/questions/52592234/does-anybody-know-how-to-configure-or-extend-lo4j2-to-recreate-logs-after-deleti
    搜到一个实现,相当于初始化日志组件,在 windows 上会生成新文件,就是不知道 linux 操作会有啥结果。
    17 条回复    2021-03-02 03:11:21 +08:00
    liprais
        1
    liprais  
       2021-03-01 17:34:36 +08:00
    不能
    dorothyREN
        2
    dorothyREN  
       2021-03-01 17:37:17 +08:00
    你可以删除以后在创建一个文件
    sdrzlyz
        3
    sdrzlyz  
       2021-03-01 17:46:36 +08:00
    @dorothyREN ...不管用吧?新旧文件的 fd 不一样
    Vegetable
        4
    Vegetable  
       2021-03-01 17:50:09 +08:00   ❤️ 2
    程序没有检测机制的情况下,会一直向之前的 fd 写入内容。所以程序不停,删除日志文件无法释放空间,必须 truncate 才能释放空间。

    这是 linux 的机制,windows...删不掉
    llussy
        5
    llussy  
       2021-03-01 17:57:37 +08:00   ❤️ 1
    cat /dev/null > filename 我清空 nginx 或 tomcat 日志时就这么搞,空间释放了,还会有新日志进去。
    fondD
        6
    fondD  
       2021-03-01 17:59:46 +08:00
    我喜欢用 echo '' > xx.log
    keepeye
        7
    keepeye  
       2021-03-01 18:02:22 +08:00
    吐槽下测试要不要测以下 rm -rf / 看看程序是否可靠?
    egzosn
        8
    egzosn  
       2021-03-01 18:02:50 +08:00
    不可以的
    boris93
        9
    boris93  
       2021-03-01 18:04:30 +08:00 via iPhone
    我记得 kill 有个信号能通知应用重新打开文件,当然最好是不要删,用 logrotate 之类的定期翻转日志,或者接入个日志管理工具比如 ELK
    pkookp8
        10
    pkookp8  
       2021-03-01 18:05:35 +08:00 via Android
    我见过三家公司的日志模块
    每次都打开一个 fd 写入关闭
    不是很理解,打开文件不耗性能吗
    CallMeReznov
        11
    CallMeReznov  
       2021-03-01 18:06:20 +08:00
    这个...日志分割不就是为了应对这种情况的嘛???
    Solace202
        12
    Solace202  
       2021-03-01 18:06:21 +08:00
    true > xx.log
    chenqh
        13
    chenqh  
       2021-03-01 18:06:52 +08:00
    要不直接写到 stdout, 用 supervisor 或者 systemd 来切割日志?
    luxinfl
        14
    luxinfl  
    OP
       2021-03-01 19:05:03 +08:00
    @Vegetable 这意思是不是即使新建了个同名文件,也不行? linux 不是很懂。
    luxinfl
        15
    luxinfl  
    OP
       2021-03-01 19:05:28 +08:00
    @CallMeReznov 日志分割不是有固定大小设置麽,说实话不是很懂
    dorothyREN
        16
    dorothyREN  
       2021-03-01 19:24:46 +08:00
    @sdrzlyz #3 有的程序可以,有的程序不可以
    msg7086
        17
    msg7086  
       2021-03-02 03:11:21 +08:00
    @luxinfl #14 打开的文件就一直存在的,文件被删除不影响使用。
    Linux 下的一些临时文件的实现,就是打开文件后马上删除,这样程序退出的时候临时文件就会自动释放了。

    删除日志文件后自动重新生成这个属于新增功能,要实现的话让他们提需求去。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 20:05 · PVG 04:05 · LAX 12:05 · JFK 15:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.