tomcat程序生成的日志文件不可讀問題 - 運維總結


 

現象描述:
線上機器的程序文件(包括TOMCAT自身)使用APP賬號作為屬主運行,同時禁止了APP賬號的BASH。登錄系統使用了統一認證,這樣每個人都有自己的賬號登錄系統。為了方便開發人員登錄查看日志,日志文件的文件權限為"rw-r-r",同時也是系統默認的umask。這里簡單說下umask權限碼。在Linux系統下,新建目錄的權限是777減去umask碼值,新建文件的權限是666減去umaks碼值,由於linux默認的umask是0022,所以一般新建目錄和文件的默認權限分別是755和644

[root@localhost ~]# umask 
0022

但是,在部署tomcat后,發現tomcat的日志文件catalina.out的權限是640(即"rw-r-----"),新生成的日志文件權限全都是640,開發者使用其他用戶登錄后對這些日志文件均不可讀!

-rw-r-----  1  app app 356K 12月 08  19:09  catalina.out
-rw-r-----  1  app app 27M  12月 02  10:17  catalina.out.7.gz
-rw-r-----  1  app app 29M  12月 03  13:08  catalina.out.6.gz
-rw-r-----  1  app app 23M  12月 04  15:25  catalina.out.5.gz
-rw-r-----  1  app app 33M  12月 05  11:30  catalina.out.4.gz
-rw-r-----  1  app app 31M  12月 06  08:44  catalina.out.3.gz
-rw-r-----  1  app app 31M  12月 07  10:02  catalina.out.2.gz
-rw-r-----  1  app app 45M  12月 08  19:09  catalina.out.1.gz

原因分析一Tomcat在啟動(catalina.sh)時會重新設置UMASK
Tomcat在啟動服務時可能會重新設置UMASK值,其默認值為0027,而操作系統的默認值0022,兩者不一樣。解決辦法:需要到catalina.sh腳本里修改UMASK值:

如上,將catalina.sh腳本中的"UMASK"的值由"0027"改為"0022",即改成系統當前用戶的umask即可!

原因分析二:log4j2設置日志文件讀寫權限(filePermissions)
由於日志比較大,並且實時輸出,需要每天做日志輪詢,如果日志輪詢的過程是通過log4j插件自動切割完成的,則可能會由lig4j2的filePermissions設置引起日志文件不可讀現象。log4j2在2.9版本以上有一個filePermissions,可以指定文件權限。

spring-boot使用log4j2作為日志插件的時候需要設置日志文件的讀寫權限,可以File 上增加filePermissions,如:

<File name="File" fileName="logs/catalina.log" filePermissions="rw-r--rw-">
   <PatternLayout pattern="%m%n" />
</File>

需要注意的是,spring-boot version1.5.7.release的spring-boot-starter-log4j2中引用的log4j2的版本是2.7,而filePermissions只有在2.9以上的版本才有,所以需要在pom.xml中添加2.9的依賴

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM