好吧,所以我试图做一个内存appender(简单地说是一个记录器,记录到ArrayList而不是控制台或文件),但现在我想禁用它打印到控制台。Log4j如何阻止我的记录器打印到控制台?
的问题和网站,我至今读(但我仍然无法数字出来是)..
- StackOverFlow Question log4j: Log output of a specific class to a specific appender
- StackOverFlow Question log4j : Disable log4j console logging and enable file logging
- Coder Launch: log4j: stop logging to console
它所有关于我想要实现的细分,但我仍然有点困惑。
我也是从Logback or Log4j Additivity Explained其中规定阅读本段..
在理论上我如果记录仪X的aditivity但是标志被设置为false,或禁用,则调用x.debug()将只记录到文件。
log4j.properties
文件
所以
log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %5p %c (%F:%L) - %m%n
#hide the Log4jMemoryAppender from console
log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender= ERROR, MEMORY_APPENDER
log4j.appender.MEMORY_APPENDER=nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender.Log4jMemoryAppender
log4j.additivity.rootLogger = false
log4j.additivity.console = false
log4j.additivity.MEMORY_APPENDER=false
如果只打印***Hello World
,并排除其他任何从MEMORY_APPENDER
,rootLogger
和console
。
package nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender;
import java.util.ArrayList;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Log4jMemoryAppender extends AppenderSkeleton {
ArrayList<LoggingEvent> eventsList = new ArrayList();
public static void main (String [] args) {
PropertyConfigurator.configure("Lib/log4j.properties");
Log4jMemoryAppender app = new Log4jMemoryAppender();
Logger logger = Logger.getLogger(Log4jMemoryAppender.class);
logger.setLevel(Level.INFO);
logger.addAppender(app);
logger.info("Hello World");
logger.debug("Level DEBUG Is SET");
for (LoggingEvent le: app.eventsList) {
System.out.println("***" + le.getMessage());
}
}
@Override
protected void append(LoggingEvent event) {
eventsList.add(event);
}
public void close() {
}
public boolean requiresLayout() {
return false;
}
}
但事实并非如此......
appender http://iforce.co.nz/i/2jypxucr.ilb.png
您还没有为'nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender'定义任何记录器或任何appender。 – maba
当我做'Logger logger = Logger.getLogger(“nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender”);'同样的结果,你是什么意思定义一个记录器? – Killrawr
在你的'log4j.properties'中。你应该有'log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender = ERROR,MEMORY_APPENDER'和'log4j.appender.MEMORY_APPENDER =' –
maba