logback服务器不自动切割日志,本地可以(非代码原因)

项目场景:

某次排查问题突然发现生产服务器log日志不进行切割了,导致info.log日志文件越来越大。


问题描述

使用logback日志文件,服务器日志突然不进行切割,排查发现logback本身配置并没有问题 本地使用同样的代码进行复现,发现可以正常切割,代表不是配置问题。


原因分析:

在logback.xml文件中增加配置,并在启动命令时,增加命令
原:nohup java -Xms4096m -Xmx4096m -Dfile.encoding=UTF-8 -jar xxx.jar > /dev/null 2>&1 &

现:nohup java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener -Dlogback.debug=true -Xms4096m -Xmx4096m -Dfile.encoding=UTF-8 -jar xxx.jar &

logback.xml 增加

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="STDOUT" />
   </root>

上述命令的作用是打印出logback本身的日志内容,在启动项目后,查看nohup.out内容

在这里插入图片描述

按照配置要求再次更改logback.xml配置,取消掉file的配置
Please consider leaving the [file] option of RollingFileAppender empty

    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 注释此段代码 -->
        <!--<file>${log.path}/info.log</file> -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/info/%d{yyyy-MM, aux}/log_info_%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
            <maxFileSize>${maxFileSize}</maxFileSize>
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>-->
            <pattern>${common-pattern-color}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 -->
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

再次运行,发现最终报错原因
在这里插入图片描述

根据logback报错内容看,是最终往debug/2024-04文件夹下写文件是权限拒绝了,查看实际的文件夹,发现此文件夹的权限是root用户,但是启动jar命令时admin用户执行。

原因:是之前有一次不小心在生产环境用root启动了一次jar,虽然后续重新启动改成了admin,但是导致文件夹是root用户创建的,所以其他用户进行写文件失败


解决方案:

提示:将对应文件夹改为admin用户(启动jar的用户)
chown -R admin:admin /data/service/logs
更改好后权限,等待几分钟后,发现系统自动进行了切割文件

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值