2015-11-04 98 views
0

我查看了網絡,無法找到一個易於遵循的指南,爲Google App Engine啓用Log4j2。作爲新功能..我發現可能相關的3個主要文件。在Google App Engine中配置Log4j2

1)應用服務引擎-web.xml中 2)的Log4j.properties 3)log4j2.xml

我Log4j.properties如下所示:(這已被包含在WEB-INF)

log4j.appender.toFile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.toFile.File=./log/logfile.log 
log4j.appender.toFile.DatePattern='.' 
log4j.appender.toFile.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=% %-5p [%t] - %c.%M - %m%n 

我說雖然runng Java應用程序下面的AppEngine上-web.xml中

<!-- Configure apache Log4J Logging --> 
    <system-properties> 
    <property name="org.apache.logging.log4j.config.file" value="WEB- INF/log4j.properties"/> 
    </system-properties> 

,我得到的錯誤。

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 

我的意圖是將條目記錄到文件中。任何指向我可以在其中找到專門針對Google App Engine的示例的指針。

+0

獨立於您的log4j2配置的位置,您無法登錄到App Engine上的文件。請參閱:http://stackoverflow.com/questions/2693081/does-google-app-engine-allow-creation-of-files-and-folders-on-the-server。我讓我的答案反映了這一點,並建議你使用一個日誌門面的可重用性(如果這是你的問題)。可悲的是我對此感到低落。 – konqi

回答

0

Log4j2不使用log4j.properties。該文件適用於Log4j 1.x.最新版本的log4j2確實支持使用屬性文件進行配置,但語法與log4j1不同。它還支持XML,JSON和YAML。

就Google App Engine而言,恐怕我從來沒有嘗試過。

2

GAE上log4j2沒有很好的教程的原因是你不能在GAE上使用log4j2和一個文件作爲輸出。 GAE文件系統是隻讀的。您將無法在香草應用程序引擎上登錄文件。您可能可以在託管虛擬機中執行此操作。

App Engine使用java.util.logging可以在WEB-INF文件夾中的logging.properties文件中進行配置。

如果你想讓你的日誌機制更加可重用,我建議你看看slf4j。您可以添加maven的依賴像這樣(如果你用maven):

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-jdk14</artifactId> 
     <version>RELEASE</version> 
    </dependency> 

如果你加一點lombok到你的混音你可以用@Slf4j註釋你的類並開始使用記錄儀與log.info()/.warn()/.error()

我覺得這是迄今爲止用Java登錄應用引擎的最佳解決方案。

還有一件事需要考慮:如果您可以將日誌寫入App Engine中的文件,那麼您如何讓自己的日誌可用,而不是公衆?你最終不得不寫一個ui來訪問你的日誌文件嗎?如果你這樣做......爲什麼不使用App Engine提供的日誌功能呢?

+0

爲什麼使用slf4j與log4j2有什麼不同?您可以在Slf4j中做的任何事情都可以通過Log4j2來實現。 – rgoers

+1

@rgoers我很難理解你的陳述。slf4j是** NOT **本身是一個記錄器,但它是一個使用java.util.logging或log4j或log4j2等各種日誌工具的外觀。您可能可以配置log4j2以登錄到java.util.logging。這似乎毫無意義,因爲它將會是一個登錄到另一個的日誌記錄工具。那會有什麼好處呢?使用slf4j,可以使用相同的調用重複使用同一個類,以獨立於實際日誌記錄工具或配置方式進行日誌記錄。 – konqi

+0

SLF4J是一個日誌API。它必須綁定到日誌實現。 Log4j2也有一個API和一個實現。是的,SLF4J的目的是作爲日誌的抽象,但決不能解決無法登錄到文件的問題。通過java.util.logging進行記錄的可能性相同。所以我不得不再次問,如何使用SLF4J來解決這裏所問的問題? – rgoers