Ice服务端使用slf4j-log4j日志文件权限问题的解决
引言:
公司内部小系统原始后台使用java-log4j来写日志,在引入ice后,部署到rhel5(linuxredhat5.4),发现log4j创建不了日志文件(连同目录)。因此纠结了一番。
纠结过程可以在本文“参考”中找到,是官方社区的一篇请教贴。
正文:
项目在WinXPSp3系统下运行日志灰常正常。Log4j配置文件如下
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.logfile.File=/opt/demo/logs/demo.log log4j.appender.logfile.DatePattern=.yyyy-MM-dd log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n
部署到rhel5服务器后,如果手工创建好“./logs”目录,则报“.log(Permissiondenied)”(无权限);如果连目录也等Log4j自行创建则报“.log(Nosuchfileordirectory)”(文件或目录不存在)。话说,Log4j本身写日志的时候发现如果没有,会连目录一起创建的,因此始终怀疑icegridnode(应用启动入口)动了log4j的“奶酪”。纠结也从此处开始……
############
1)笔者检查icegridnode的权限,发现运行在root上,妥妥得……
2)编写个用Ice.Logger写日志的,没有log4j嘛,又是妥妥得……
——于是有了参考中的这篇请教贴~。=
3)(此处跳过17个小时Zzz...)
4)第二天一早,来看,Bernard兄给了回复。经过Bernard兄一挑明,回帖过程中,阅读了文档做了实验,猛然反省过来。问题不是icegridnode没有运行在root上,而是IceBox.Server没有运行在root上,而是nobody上。
5)果断添加用户demo,给个“./logs”所有者权限。配置文件中“<node><icebox>”添加属性“user="cep"”。再跑,目录也出了文件也成了。查看进程中的IceBox.Server,先前的“nobody”已经变成“demo”。妥妥得~~~~~~
############
至此问题终于解决了。另外,linux系统用户管理的考虑跟windows的确大有不同。感叹一下,反省两下。rpm包安装提示找不到用户的问题,大抵与此相似吧。
参考:
Islog4jandIce.loggerconflict?
最后特别感谢Bernard的热情帮助!