好吧,所以我試圖做一個內存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