You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slf4J在Linux Screen会话中无法写入日志文件的问题求助

问题描述

Slf4j需将日志写入LatestLog.log文件。直接执行命令java -jar Bot.jar args...时,日志可正常写入/logs/LatestLog.log;但通过命令screen -d -m -S TestBot java -jar Bot.jar在Linux Screen会话中运行时,无日志生成。

相关配置

依赖配置(pom.xml)

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-reload4j</artifactId>
    <version>1.7.36</version>
    <scope>runtime</scope>
</dependency>

log4j配置

log4j.rootLogger=INFO, stdout, fout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=INFO
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{'['HH:mm:ss']'} >> %-5p<< | %m%n
#log4j.appender.stdout.layout.ConversionPattern=%d{'['HH:mm:ss']'} >> %-5p<< [%c{2}] --> %m%n

log4j.appender.fout=org.apache.log4j.FileAppender
log4j.appender.fout.Threshold=DEBUG
log4j.appender.fout.File=logs/Latestlog.log
log4j.appender.fout.layout=org.apache.log4j.PatternLayout
log4j.appender.fout.layout.ConversionPattern=%d{'['dd.MM.yyyy' | 'HH:mm:ss']'} >> %-5p << [%c] - %m%n

#log4j.appender.fout.org.apache.http.wire=INFO
log4j.logger.org.apache.http.wire=INFO
log4j.logger.org.apache.http.headers=INFO

系统环境

Debian 4.19.269-1

已尝试操作

  • 修改logs文件夹权限
  • 搜索相关资料未找到解决方案

解决方案

1. 修正Screen工作目录

Screen后台启动时默认工作目录可能和你直接运行jar时不一致,导致相对路径logs/Latestlog.log无法定位到正确的文件夹。解决方法是在命令中指定jar所在的工作目录:

screen -d -m -S TestBot bash -c "cd /实际路径/到/Bot.jar所在目录 && java -jar Bot.jar"

替换/实际路径/到/Bot.jar所在目录为jar文件的真实存放路径。

2. 统一文件名大小写

Linux是大小写敏感系统,你描述的目标日志文件是LatestLog.log(大写L),但log4j配置里写的是Latestlog.log(小写l),这会导致路径匹配失败。把配置里的文件名改成和预期一致:

log4j.appender.fout.File=logs/LatestLog.log

3. 明确指定log4j配置文件路径

如果Screen运行时无法加载到log4j配置文件,可在java命令中直接指定配置文件的绝对路径:

screen -d -m -S TestBot bash -c "cd /实际路径/到/Bot.jar所在目录 && java -Dlog4j.configuration=file:/实际路径/到/log4j配置文件 -jar Bot.jar"

确保替换配置文件的真实绝对路径。

4. 验证运行用户权限

检查Screen会话的运行用户是否和你直接启动jar的用户一致:

ps aux | grep TestBot

若用户不同,可能导致无权限写入logs目录,可指定用户运行:

screen -d -m -S TestBot sudo -u 你的用户名 bash -c "cd /实际路径/到/Bot.jar所在目录 && java -jar Bot.jar"

5. 查看Screen会话的控制台输出

重新连接到Screen会话,查看是否有log4j的错误提示:

screen -r TestBot

如果出现类似Could not open file logs/LatestLog.log的报错,可直接定位是路径或权限问题。


内容的提问来源于stack exchange,提问作者user20851022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:45:36