Java 使Logback不*遵循类继承*
Java 使Logback不*遵循类继承*,java,inheritance,logback,Java,Inheritance,Logback,remote.error.SuperClass package remote.error; 公共类超类{ 公共超类(){ //无法更改getClass(),因为它属于第三方库 LoggerFactory.getLogger(getClass()).debug(“不应打印”); } } local.debug.SubClass package local.debug; 公共类子类{ 公共子类(){ super();//本例为显式 LoggerFactory.getLogger(getClass(
remote.error.SuperClass
package remote.error;
公共类超类{
公共超类(){
//无法更改getClass(),因为它属于第三方库
LoggerFactory.getLogger(getClass()).debug(“不应打印”);
}
}
local.debug.SubClass
package local.debug;
公共类子类{
公共子类(){
super();//本例为显式
LoggerFactory.getLogger(getClass()).debug(“应打印”);
}
}
logback.xml
使用上述回写配置,不应打印仍将打印(除了应打印)
有没有办法将Logback配置为不遵循类继承
换句话说,只应打印,应打印,因为超类具有级别ERROR基类应将静态引用的类传递给logback,而不是虚拟函数getClass()的结果 所以
SuperClass.class
而不是this.getClass()
如果,正如您所说,您不能更改基类,或者提出错误报告让某人更改它,那么您唯一的选择就是更改派生类。因此,将子类
放入包remote.error.local
,但让它从调用中提取自己的记录器,并使用您想要的任意字符串,例如
LoggerFactory.getLogger("local.debug")
请考虑以下情况之一:
%d{HH:mm:ss.SSS}[%thread]-5级别%logger{36}-%msg%n
问题在于超类属于第三方库,即无法修改。。。
package com.learn;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SuperClass
{
private static final Logger logger =
LoggerFactory.getLogger(SuperClass.class);
public SuperClass()
{
logger.info("should not show");
}
}
package com.learn;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SubClass
extends SuperClass
{
private static final Logger logger = LoggerFactory.getLogger(SubClass.class);
public SubClass()
{
logger.info("should show");
}
public void hoot()
{
logger.info("hoot");
}
}
package com.learn;
public class Main
{
public static void main(final String[] arguments)
{
SubClass subClass = new SubClass();
subClass.hoot();
}
}
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.learn.SuperClass" level="OFF"/>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>