java web项目使用非管理员用户部署到Unix/Linux Weblogic服务器上时,由于weblogic 的$DOMAINS_HOME/bin/startWeblogic.sh文件中配置的umask值为022,所以生成的log日志文件的读写默认权限为rw-r–r-- ,导致其他用户无法操作日志文件,比如说运维用户会定期清理历史日志文件。
(参考自点击打开链接)
1.Log4j 2.9以上版本可以File上增加filePermissions配置
<file name=“File” fileName=“my.log” filePermissions=“rwxr-xr-x” >
<PatternLayout pattern=“%m%n” />
</file>
2.Log4j 2.9以下版本可以通过继承RollingFileAddpender或者DailyRollingFileAppender来实现
log4j.properties配置文件:
log4j.appender.file=com.myproj.common.myLog4jWriter
log4j.appender.file.Threhold=INFO
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.File=/home/ap/projweb/log/my.log
log4j.appender.file.DatePattern=.yyyyMMdd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.ConversinPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c:%L]-[%p] %m%n
JDK7.0以上的版本:
com.myproj.common.myLog4jWriter.java 代码
import java.io.File;
import java.io.IOException;
import org.apache.log4j.DailyRollingFileAppender;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.Set;
public class myLog4jWriter extends DailyRollingFileAppender{
@Override
Public synchronized void setFile(String fileName,boolean append,boolean bufferedIO,int bufferSize) throws IOException {
super.setFile(fileName,append,bufferedIO,bufferSize);
File f = new File(fileName);
Set<PosixFilePermission> set = new HashSet<PosixFilePermission>();
//设置所有者权限
set.add(PosixFilePermission.OWNER_READ);
set.add(PosixFilePermission.OWNER_WRITE);
set.add(PosixFilePermission.OWNER_EXECUTE);
//设置同组用户权限
set.add(PosixFilePermission.GROUP_READ);
set.add(PosixFilePermission.GROUP_EXECUTE);
//设置其他用户权限
set.add(PosixFilePermission.OTHERS_READ);
set.add(PosixFilePermission.OTHERS_EXECUTE);
if(f.exists()){
Files.setPosixFilePermissions(f.toPath(),set);
}
}
}
JDK7.0以下版本:
com.myproj.common.myLog4jWriter.java 代码
import java.io.File;
import java.io.IOException;
import org.apache.log4j.DailyRollingFileAppender;
public class myLog4jWriter extends DailyRollingFileAppender{
@Override
Public synchronized void setFile(String fileName,boolean append,boolean bufferedIO,int bufferSize) throws IOException {
super.setFile(fileName,append,bufferedIO,bufferSize);
File file = new File(fileName);
//为所有用户增加可读权限
file.setReadable(true,false);
//为所有用户增加可执行权限
file.setExecutable(true,false);
}
}
启动项目即可
生成的日志文件读写权限为rwxr-xr-x(755)
File类中的设置权限的方法:
Public boolean setReadable(boolean readable):设置文件的所有者的可读权限。参数readable 为true时表示设置文件所有者有文件的可读权限,为false则无可读权限
Public boolean setReadable(boolean readable,boolean ownerOnly): 设置文件所有者或每个人的执行权限。参数readable 为true时表示允许文件的可读权限,为false则无可读权限;参数ownerOnly为true时表示设置可读权限只对文件所有者生效,为false时表示可读权限适用于每个用户。返回值返回true表示方法执行成功,false表示方法执行失败。
setWriteable(boolean writeable)、setWriteable(boolean writeable,boolean ownerOnly) 用法同上
setExecutalbe(boolean executalbe)、setExecutalbe(boolean executalbe,boolean ownerOnly) 用法同上