2009-09-10 61 views
1

我正在实例化一个类中的log4j对象,它继承父类的大多数方法和属性。现在我只能从子类中记录消息。我怎样才能获得日志消息输出在超类和子类?使用log4j与继承类

编辑:我做记录的方式是我在子类和超既是一个实例变量,所以它看起来像下面这样:

public class SuperClass { 
/** 
* Logger for this class 
*/ 
private static final Logger logger = Logger.getLogger(SuperClass.class); 

/* Rest of code goes here */ 
} // end SuperClass 

与同为子类。

我的log4j的配置:

## gps log4j.rootLogger==ERROR, clientLog, catissuecoreclientLog 

log4j.rootLogger==DEBUG, clientLog, catissuecoreclientLog 
### direct messages to file hibernate.log ### 

log4j.appender.clientLog=org.apache.log4j.FileAppender 
log4j.appender.clientLog.File=./log/client.log 
log4j.appender.clientLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.clientLog.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

log4j.appender.catissuecoreclientLog=org.apache.log4j.FileAppender 
log4j.appender.catissuecoreclientLog.File=./log/catissuecoreclient.log 
log4j.appender.catissuecoreclientLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.catissuecoreclientLog.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} - %m%n 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

### set log levels - for more verbose logging change 'info' to 'debug' ### 

#log4j.rootLogger=warn, stdout 
#log4j.rootLogger=warn, file 
#log4j.logger.org.hibernate=info 

### log just the SQL 
#log4j.logger.org.hibernate.SQL=debug 

### log JDBC bind parameters ### 
log4j.logger.org.hibernate.type=info 

### log schema export/update ### 
log4j.logger.org.hibernate.tool.hbm2ddl=debug 

### log cache activity ### 
#log4j.logger.org.hibernate.cache=debug 

### log JDBC resource acquisition 
#log4j.logger.org.hibernate.jdbc=debug 

### enable the following line if you want to track down connection ### 
### leakages when using DriverManagerConnectionProvider ### 
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace 
+0

什么是“log4j对象”? – skaffman 2009-09-10 18:42:08

+0

上面代码示例中的记录器实例变量。 – Brian 2009-09-10 18:50:11

+0

我把它加倍等于登录'log4j.rootLogger == DEBUG'是一个错字?另外,log4j.rootLogger中未指定stdout appender – ChssPly76 2009-09-10 19:17:56

回答

1

你需要做记录的超类可看见的。

通常情况下,设置是在每个类中创建一个记录器静态变量,以允许每个类具有不同的记录级别。 例如

private static final Logger LOG = Logger.getLogger(ClassName.class.getName()); 

当您通过实际登录他们进入你的类的名称,而不是类名

1

嗯...?

您需要从您希望记录消息的任何类的任何方法调用log4j的日志记录方法(debug()info(),error()等)。然后,您可以配置(在您的log4j.properties中)哪些消息可见/记录/转到什么日志文件/等...每个类级别(如果您愿意的话)。

+0

即将键入此... +1 – vpram86 2009-09-10 18:36:38

+0

我确实知道如何调用日志记录方法 - 这不是问题。问题是我没有从超类获取任何日志语句。我已将logging的级别配置为DEBUG。 – Brian 2009-09-10 18:45:28

+0

你可以发布你的log4j配置吗?是否将'SuperClass'和子类都设置为DEBUG级别? – ChssPly76 2009-09-10 18:57:59