如何使用带有groovy注释@ Log4j的配置文件

时间:2014-01-19 18:24:13

标签: logging groovy log4j

我有一个名为“xxx”的groovy脚本添加到PATH中,所以我可以使用它来避免“groovy xxx”。此脚本动态加载其他类。我想在这些类中使用@ Log4j注释,并在文件夹/home/user/test/log4j.properties中使用属性文件配置log4j,但我无法理解它是如何工作的。

脚本代码是:

System.setProperty("log4j.debug", "true")
System.setProperty("log4j.configuration", "/home/user/test/log4j.properties")

def s = new File("/home/user/test/log4j.properties").toURL()
this.class.classLoader.addURL(s)
println "started: ${this.class.classLoader}"
// other code

当我执行命令“xxx”时,输出为:

$ xxx
started: groovy.lang.GroovyClassLoader$InnerLoader@1ac91010
log4j: Trying to find [/home/user/test/log4j.properties] using context classloader groovy.lang.GroovyClassLoader@4ccdd309.
log4j: Trying to find [/home/user/test/log4j.properties] using groovy.lang.GroovyClassLoader@4ccdd309 class loader.
log4j: Trying to find [/home/user/test/log4j.properties] using ClassLoader.getSystemResource().
log4j: Could not find resource: [/home/user/test/log4j.properties].
..log4j:WARN No appenders could be found for logger (groovy.Datastore).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

类加载器不相同,无法找到该文件。这个程序究竟是如何运作的有没有办法不使用:

groovy -cp /home/user/test/log4j.properties -Dlog4j.configuration=/home/user/test/log4j.properties xxx

更新 我已经发现使用的类加载器是使用Thread.currentThread()。getContextClassLoader()可以访问的上下文classLoader。现在的问题是我无法在类路径中设置属性文件,但解决方法是将其放入jar并将其放在groovy lib文件夹中。是否有 easy 方法在上下文类加载器中加载属性文件?

1 个答案:

答案 0 :(得分:0)

据推测,您正在尝试使用所有这些来配置Log4j。类加载器用于加载类。属性文件不是类文件。这意味着最简单的方法就是不要这样做。

相反,您可能希望仔细阅读Log4j documentation并查看它们如何使用类加载器进行配置(如果这是您要执行的操作)Log4j。

只需以常规方式打开属性文件,并使用Log4j文档中提到的相应方法。