我正在尝试配置Java Logging API的FileHandler,将我的服务器日志记录到我的主目录中的一个文件夹中,但我不想在每台机器上都创建这些目录。
例如,在logging.properties文件中,我指定了以下内容:
这样我就可以在我的家目录(%h)中收集MyApplication的日志,并且可以使用%u和%g变量对其进行轮转。
当我在log4j.properties中指定时,Log4j支持这一功能。
看起来对于Logging FileHandler存在一个bug: Bug 6244047: 无法指定logging FileHandler的目录,除非它们存在 听起来他们似乎没有计划修复它或公开任何属性来解决这个问题(除了让您的应用程序解析logging.properties或硬编码所需的路径):
引用: 看起来java.util.logging.FileHandler并不期望指定的目录可能不存在。通常情况下,它必须检查这个条件。此外,它还必须检查目录的写入权限。另一个问题是如果其中一个检查不通过该怎么办。
一种可能性是如果用户具有适当的权限,则在路径中创建缺失的目录。另一种方法是抛出一个带有清晰消息的IOException,说明出了什么问题。后一种方法看起来更一致。
例如,在logging.properties文件中,我指定了以下内容:
java.util.logging.FileHandler
java.util.logging.FileHandler.pattern=%h/app-logs/MyApplication/MyApplication_%u-%g.log
这样我就可以在我的家目录(%h)中收集MyApplication的日志,并且可以使用%u和%g变量对其进行轮转。
当我在log4j.properties中指定时,Log4j支持这一功能。
log4j.appender.rolling.File=${user.home}/app-logs/MyApplication-log4j/MyApplication.log
看起来对于Logging FileHandler存在一个bug: Bug 6244047: 无法指定logging FileHandler的目录,除非它们存在 听起来他们似乎没有计划修复它或公开任何属性来解决这个问题(除了让您的应用程序解析logging.properties或硬编码所需的路径):
引用: 看起来java.util.logging.FileHandler并不期望指定的目录可能不存在。通常情况下,它必须检查这个条件。此外,它还必须检查目录的写入权限。另一个问题是如果其中一个检查不通过该怎么办。
一种可能性是如果用户具有适当的权限,则在路径中创建缺失的目录。另一种方法是抛出一个带有清晰消息的IOException,说明出了什么问题。后一种方法看起来更一致。