是否可以在log4j 1.x中指定基于包的通配符?

时间:2016-11-17 09:57:25

标签: java log4j

我在log4jproperties文件中尝试了下面的package appender,但它没有用。 请帮我解决这个问题。

log4j.logger.com.ewp.*.service=ERROR,SERVICELOG

#SERVICELOG appender
log4j.appender.SERVICELOG=org.apache.log4j.RollingFileAppender
log4j.appender.SERVICELOG.File=C:/Log/service_log.log
log4j.appender.SERVICELOG.layout=org.apache.log4j.PatternLayout

1 个答案:

答案 0 :(得分:0)

log4j(1.x)中只有前缀继承的概念,因此您无法做到这一点。

请参阅https://logging.apache.org/log4j/1.2/manual.html

您需要将任何* .service leaf包放入配置文件中。

或者,你可以使用不同的记录器名称,也许是一些与命名方案相反的名称,或者更具象征性的东西(我的意思是,如果你还需要专用的记录,这可能是有效的)。如果编码开销可以接受,则使用辅助记录器。

想一想:

Logger log = Logger.getLogger("any.string.prefix.here." + "some.suffix");

编辑:如果您能够修改类路径并将log4j-extras添加到其中,您可以从那里获得有关过滤器的帮助:https://logging.apache.org/log4j/extras/apidocs/org/apache/log4j/filter/package-summary.html

但是,AFAICS,ExpressionFilter会对Message&LoggerMatchFilter上的完全记录器名称进行过滤 - 所以这些也可能不是解决方案。