Log4j中,貌似只能通过配置文件去设置是否在控制台输出日志,可是这种设置是全局的。请问有没有什么方法能控制想输出在控制台的则在控制台输出,不想在控制台输出的仅存入文件?比如设置某些类的日志不输出在控制台,请问有这样的操作方法么?

解决方案 »

  1.   

    log4j.properties配置:
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.Target=System.out  
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
      

  2.   

    自己去实现
    这时我之前写的,可以参考
    public class AccessAppender extends FileAppender{ private String prefix;

    private boolean fileNameByThread; private String appenderType;

    private String datePattern;

    private String fileName;

    private String file;

    private int maxBackupIndex;

    private String maxFileSize;

    @Override
    public String getFile() {
    return file;
    } @Override
    public void setFile(String file) {
    this.file = file;
    }

    @Override
    public void append(LoggingEvent event) {
    AppenderMaker.get().append(event);
    }
    public int getMaxBackupIndex() {
    return maxBackupIndex;
    } public void setMaxBackupIndex(int maxBackupIndex) {
    this.maxBackupIndex = maxBackupIndex;
    } public String getMaxFileSize() {
    return maxFileSize;
    } public void setMaxFileSize(String maxFileSize) {
    this.maxFileSize = maxFileSize;
    }

    public String getDatePattern() {
    return datePattern;
    } public void setDatePattern(String datePattern) {
    System.out.println("初始化DatePattern : " + datePattern);
    this.datePattern = datePattern;
    }
    public String getAppenderType(){
    return this.appenderType;
    }

    public void setAppenderType(String appenderType) {
    this.appenderType = appenderType;
    }

    public String getPrefix() {
    return prefix;
    } public void setPrefix(String prefix) {
    System.out.println("初始化Prefix : " + prefix);
    this.prefix = prefix;
    } public boolean isFileNameByThread() {
    return fileNameByThread;
    } public void setFileNameByThread(boolean fileNameByThread) {
    System.out.println("初始化fileNameByThread : " + fileNameByThread);
    this.fileNameByThread = fileNameByThread;
    } public String getFileName() {
    return fileName;
    } public void setFileName(String fileName){
    this.fileName = fileName;
    }

    }
      

  3.   


    private static final AccessAppender ACCESSAPPENDER = (AccessAppender) Logger.getLogger(Lang.class).getAppender("ThreadAppender");

    private static ThreadLocal<FileAppender> appenders = new ThreadLocal<>(); private static FileAppender singleAppender = ACCESSAPPENDER.isFileNameByThread() ? AppenderFactory.getAppender(ACCESSAPPENDER) : null;



    /**
     * 
     * @return
     */
    public static FileAppender get(){
    FileAppender fileAppender = null;
    if(ACCESSAPPENDER.isFileNameByThread()) {
    if(appenders.get() == null){
    initAppender();
    }
    fileAppender = appenders.get();
    } else {
    fileAppender = singleAppender;
    }
    return fileAppender;
    } private static void initAppender(){
    appenders.set(AppenderFactory.getAppender(ACCESSAPPENDER));
    }
      

  4.   


    http://blog.csdn.net/zmx729618/article/details/51260803