Inheritance 使用log4j从基类和扩展类进行日志记录?
我将slf4j与log4j一起使用,我有以下情况:Inheritance 使用log4j从基类和扩展类进行日志记录?,inheritance,logging,log4j,slf4j,Inheritance,Logging,Log4j,Slf4j,我将slf4j与log4j一起使用,我有以下情况: package x.y.z.base; public class FTPOperationsBase { private final Logger log = LoggerFactory.getLogger(FTPOperationsBase.class); protected FTPClient ftp; // some more fields public void connect() {
package x.y.z.base;
public class FTPOperationsBase {
private final Logger log = LoggerFactory.getLogger(FTPOperationsBase.class);
protected FTPClient ftp;
// some more fields
public void connect() {
...
// log all connect exceptions
}
public void disconnect() {
...
// log all disconnect exceptions
};
}
可以看出,包装是x.y.z.base。现在我有几个扩展这个基类的类(这些类目前在包x.y.z.classA、x.y.z.clasB等中)
我希望这些类中的每一个都有独立的日志文件,因为它们作为独立的模块。但我也希望以某种方式将日志从基类放到这些单独的日志中,这取决于使用的是哪个类,也就是说,如果只有一个子类在执行,我不希望在所有日志中都使用日志形式的基类。例如,如果我有扩展类:
public class FTPExtendedClass1
extends FTPOperationsBase {
public void doSomething() {...}
}
并进行以下代码顺序:
FTPExtendedClass1 obj1 = new FTPExtendedClass1();
obj1.connect();
obj1.doSomething();
obj1.disconnect();
我希望此案例的日志文件如下所示:
- connect()中可能的信息/警告/错误
- doSomething()可能的信息/警告/错误
- 来自断开连接()的可能信息/警告/错误
谢谢。您必须在log4j.xml中创建不同的Appender 每班一个
<logger name="yourBaseClassName" additivity="false">
<level value="INFO" />
<appender-ref ref="BasefileAppender" />
</logger>
<appender name="BasefileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="/path/yourfile.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/>
</layout>
</appender>
<logger name="yourExtendedClassName" additivity="false">
<level value="INFO" />
<appender-ref ref="ExtendOnefileAppender" />
</logger>
<appender name="ExtendOnefileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="/path/ExtendOnefileAppender.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/>
</layout>
</appender>
我认为它不能满足您的第二个需求(但我还希望以某种方式将日志从基类放到这些单独的日志中,具体取决于使用的是哪个类)
但这是一个开始…;-)这样,您就可以根据类的名称登录到不同的文件
希望它能有所帮助正如您所说,这不是我一直在寻找的解决方案,我已经意识到这种配置。我想我只需要通过基类方法声明传播异常,或者传递记录器引用,两者都可以。无论如何,+1表示花时间回答问题;)
Logger mylogger = Logger.getLogger(MyClass.class.getName())