4

在阅读本文之前,您应该知道我是一名未知 Java 领域的 Python 开发人员。

我正在尝试为 Java 设置日志记录。当我设置 logging.properties 时,我能够让它工作。像这样:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.config.file= /path/to/logging/file/logging.properties -jar start.jar

logging.properties文件已签入修订控制,并且在我当前的设置中将用于所有环境,因此我不想在logging.properties文件中对 logging.FileHandler.pattern 进行硬编码。因此,我尝试通过这样做将其移至命令行:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.config.file= /path/to/logging/file/logging.properties -Djava.util.logging.FileHandler.pattern=/var/log/project_name/solr/solr.log -jar start.jar

但似乎无法识别 FileHandler.pattern,因此该文件从未写入。所以,然后我想,好吧,让我们放弃logging.properties文件并尝试将所有内容都扔到命令行上。所以,然后我尝试了这个:

$ /usr/bin/java -server -Xmx512m -Djava.util.logging.Handler=java.util.logging.FileHandler -D.level=WARNING -Djava.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter -Djava.util.logging.FileHandler.pattern=/var/log/project_name/solr/solr.log -jar start.jar

但这也没有用。所以,我正在寻求帮助。

三个问题:

  1. 为什么我提供的第二个示例不起作用?
  2. 为什么我提供的第三个示例不起作用?
  3. 由于 logging.properties 文件已检入版本控制并且是共享文件,因此正确的方法是什么?最佳做法是什么?

回复时,请用小词为我们Java新手。:-)

4

2 回答 2

2

-Dxyz.blahbla.bla=foobar是一个系统属性,并不是所有的东西都可以用作系统属性,因为会有一些代码会要求这个属性,即使你可以放任何你想要的东西,也没有人会阅读它。

例如,试试这个代码:

class HelloSystemProperty {
     public static void main( String ... args ) {
         System.out.println( System.getProperty("getIt"));
      }
 }

然后像这样运行它:

java -DgetIt=Yeah HelloSystemProperty

因此,正如您现在可能猜到的那样,您不能只是将进入该文件的任何内容作为系统属性放入,除非您自己阅读并相应地处理它。

因此,如果您确实需要手动修改日志记录级别作为系统属性,您可能需要添加代码来读取该属性并设置值,但这可能太多了,我不确定您是否想去那里。

所以使用文件应该足够了

我希望这有帮助。

于 2011-06-29T05:58:04.733 回答
1

“硬编码 FileHandler 模式”可能不是一件坏事,因为该模式可以包含在运行时替换的标记。我知道 %t 被虚拟机认为是系统临时目录(如 /var/tmp 或 C:\\TEMP)所取代,%h 是用户的主目录(或者更确切地说是“user.home”系统属性),还有更多,但我不知道所有这些。

如果您使用其中的一些,则该模式可能足够通用,您不必担心尝试对它进行超级概括以实现可移植性。

于 2012-11-14T16:24:38.963 回答