Log4j中,貌似只能通过配置文件去设置是否在控制台输出日志,可是这种设置是全局的。请问有没有什么方法能控制想输出在控制台的则在控制台输出,不想在控制台输出的仅存入文件?比如设置某些类的日志不输出在控制台,请问有这样的操作方法么?
解决方案 »
- 使用spring3.0初始化时出现问题
- eclipse在线安装maven的问题
- mysql加了unique字段后,AUTO_INCREMENT字段只能从1开始??
- getParameter与getAttribute的区别,请详细介绍下
- 50分求webWork做的Web项目
- 做个统计:同意java程序员的平均工资高于dotnet的回复1,不同意的回复0
- 帖子字少图多比较详细,,只为求指教,涉及ajax等
- webLogic问题
- 200分寻求Addison Wesley 出版的《Understanding Web Services XML WSDL SOAP and UDDI》
- 谁能推荐一本EJB入门的书!
- java怎么才能拿到Jpush推送里面的统计数据,比如推送数量,用户的点击数
- 读取两个配置文件,为什么打印不出System.out.println(prop1.get(m1Key))????
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
这时我之前写的,可以参考
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;
}
}
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));
}
http://blog.csdn.net/zmx729618/article/details/51260803