簡體   English   中英

JDK11升級后log4j2 RollingFileAppender拋出java.io.FilePermission錯誤

[英]After JDK11 upgrade, log4j2 RollingFileAppender throws java.io.FilePermission error

從 JDK8 升級到 JDK11 后,我們在啟動 tomcat 時收到以下消息:

     ERROR Could not create plugin of type class 
     org.apache.logging.log4j.core.appender.RollingFileAppender
     for element RollingFile: java.security.AccessControlException:
     access denied ("java.io.FilePermission" "/zdata/svrgrp/logs/qam1" "read")
     java.security.AccessControlException: access denied ("java.io.FilePermission"
     "/zdata/svrgrp/logs/qam1" "read")

Java 將其他文件寫入該目錄沒有問題; 例如,我們在命令行中有一個 -outfile /zdata/tomcat/qam1/logs/catalina.out,我們看到 output 被寫在那里。

但最令人費解的是,當我們使用完全相同的 catalina 策略在 JDK8 上運行它時,它運行得很好。

JDK11 使用 log4j 的方式是否有一些根本性的變化可以解釋這種行為?

我們的 log4j 配置 xml 如下。 sys:applogdir 定義為 /zdata/svrgrp/logs/qam1:

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
  <Appenders>
    <RollingFile
      name="default.file"
      fileName="${sys:applogdir}/myapp.log"
      filePattern="${sys:applogdir}/myapp.log.%d{yyyy-MM-dd}">
      <PatternLayout>
        <Pattern>%d %-5p [%t]:${sys:bi.tomcat.instanceName} (%F:%L) - %m%n</Pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy/>
    </RollingFile>

  <Loggers>
    <Root level="debug">
      <AppenderRef ref="default.file"/>
    </Root>
  </Loggers>

</Configuration>

有沒有其他人經歷過從 JDK8 升級到 JDK11 的這種行為? 對可能發生的變化有任何想法嗎?

更新

從 JDK9 開始,java.io.FilePermission 默認停止規范化路徑名。 這意味着將不再遵循符號鏈接。

在我們的環境中,“/zdata/svrgrp/logs/qam1”是指向另一個文件系統上某個位置的符號鏈接。 因此 java.io.FilePermission 不會遵循該符號鏈接,從而導致出現“拒絕訪問”錯誤。

您可以通過將 permissionsUseCanonicalPath 屬性設置為 True 來告訴 java.io 恢復到其舊行為。 所以我將它添加到我們的啟動腳本中:

-Djdk.io.permissionsUseCanonicalPath=true

一切都開始起作用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM