Log4j2多用户运行程序时触发文件权限异常问题咨询
解决Log4j2多用户运行时日志文件权限异常问题
问题原因
用户A创建日志文件后,文件权限限制导致用户B无法写入,即便配置了filePermissions,仍可能受系统umask、目录权限或Log4j2配置细节影响。
解决方案
1. 配置共享日志目录权限
确保所有运行程序的用户属于同一个共享组(比如appusers),并设置日志目录的sgid位,让新创建的文件自动继承目录的组权限:
# 将日志目录所属组改为共享组(示例组名为appusers) chown :appusers /var/applog/myapp/aggregator # 设置目录权限为组读写执行,并开启sgid位 chmod g+rws /var/applog/myapp/aggregator
2. 修正Log4j2配置
- 日志文件无需执行权限,将
filePermissions改为rw-rw-rw-(对应权限值666); - 新增
fileGroup指定共享组,确保文件创建时归属正确; - 确认Log4j2版本≥2.10(
filePermissions属性从该版本开始支持)。
修改后的RollingFile配置:
<RollingFile name="log_file" fileName="/var/applog/myapp/aggregator/aggregator_rest.log" filePattern="/var/applog/myapp/aggregator/aggregator_rest.%i.log.gz" filePermissions="rw-rw-rw-" fileGroup="appusers"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n</Pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="100 MB" /> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile>
3. 调整启动时的umask
系统默认umask(如0022)会抵消filePermissions的设置,在程序启动脚本中添加umask配置,确保同组用户可读写:
# 设置umask为0002,让新文件默认权限为664(rw-rw-r--) umask 0002 # 启动程序命令 java -jar your-app.jar
4. 验证权限
用户A启动程序后,检查日志文件权限:
ls -l /var/applog/myapp/aggregator/aggregator_rest.log
预期输出示例:
-rw-rw-r-- 1 userA appusers 0 Aug 20 10:00 aggregator_rest.log
此时用户B(属于appusers组)即可正常写入日志。
内容的提问来源于stack exchange,提问作者şentürk şimşek
相关产品推荐
相关产品推荐

