[ 
https://issues.apache.org/jira/browse/LOG4J2-2238?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16779738#comment-16779738
 ] 

Jeff Gullett commented on LOG4J2-2238:
--------------------------------------

To add to my previous comment, the stack trace clearly shows that 
RollingFileManagerFactory.createManager(RollingFileManager.java:640) 
immediately calls the java.io.FileOutputStream constructor, even though that 
stream is never going to be used for anything.  The resulting exception crashes 
Log4j, and prevents any logging from my application.  Clearly it would be 
better if an unused FileOutputStream was never created.  I haven't looked at 
the code, but my guess is that the easiest way to fix this would be to lazy 
load the FileOutputStream when used, instead of from within the call to 
RollingFileManagerFactory.createManager.

> Insufficient Permissions Error when Rolling Log Files
> -----------------------------------------------------
>
>                 Key: LOG4J2-2238
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2238
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.9.1
>         Environment: CentOS 6.6 (32-bit)
> Java 8u151 (32-bit)
>            Reporter: Jeff Gullett
>            Priority: Minor
>              Labels: Linux, permissions, unix
>             Fix For: 2.12.0
>
>
> I have an application utilizing Log4j2 using a rolling file appender.  Within 
> each appender, I set the log file permissions using the new "filePermissions" 
> attribute to be 644 (rw-r--r--). If I run my application as "root", then try 
> to run as any other user, I receive an error with the text (Note: ... == 
> "org.apache.log4j.core."):
> ERROR RollingFileManager (/var/log/myApp/Info.log) 
> java.io.FileNotFoundException: /var/log/myApp/Info.log (Permission denied) 
> java.io.FileNotFoundException: var/log.myApp/Info.log (Permission denied)
>          at java.io.FileOutputStream.open0 (Native Method)
>          at java.io.FileOutputStream.open(FileOutputStream.java:270)
>          at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
>          at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
>          at 
> ...appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:640)
>          at 
> ...appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:608)
>          at ...appender.AbstractManager.getManager(AbstractManager.java:113)
>          at 
> ...appender.OutputStreamManager.getManager(OutputStreamManager.java:188)
>          ...
> My configuration file is like the following:
> {code:xml}
> <?xml version="1.0" encoding="utf-8"?>
> <Configuration>
>   <Appenders>
>     <RollingFile name="InfoLog" fileName="/var/log/myApp/Info.log" 
> filePattern="/var/log/myApp/Info%d\{yyyy-MM-dd}.%i.log" 
> filePermissions="rw-r--r--">
>       <Policies>
>         <OnStartupTriggeringPolicy />
>         <TimeBasedTriggeringPolicy modulate="true" />
>         <SizeBasedTriggeringPolicy size="16MB" />
>       </Policies>
>       <DefaultRolloverStrategy max="9999">
>         <Delete basePath="/var/log/myApp">
>           <IfLastModified age="365d" />
>         </Delete>
>       </DefaultRolloverStrategy>
>     </RollingFile>
>   </Appenders>
>   <Loggers>
>     <Rool level="debug">
>       <AppenderRef ref="InfoLog" level="info" />
>     </Root>
>   </Loggers>
> </Configuration>
> {code}
> I have verified that the permissions on "/var/log/myApp" are 777 (rwxrwxrwx). 
>  I have also verified that as a non-root user, I am able to move an existing 
> log file (e.g., "mv Info.log Info_Archive.log" works when running as non-root 
> user, even though running my application as that user results in the 
> aforementioned error).  My expectation is that the file would be moved, a new 
> file created, then the output stream opened.  However, it appears from the 
> error that the output stream is opened, then the log file renamed, and 
> finally a new log file created and opened.  A work-around for this issue is 
> to create log files with 777 permissions, but I don't want to give all users 
> full permission to my log files.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to