package exam.action.logger;
import java.io.File;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
import cn.netinnet.qdk.util.DateUtil;
import exam.util.FileUtil;
public class HelloAppender extends AppenderSkeleton {
private String account ;
private String fileName = DateUtil.getUniqueID();
/*@Override
protected void append(LoggingEvent event) {
// System.out.println("Hello, " + account + " : "+ event.getMessage());
String str = (String) event.getMessage();
File downloadPath = new File("d:" +File.separator+"data"+File.separator+"temp"+File.separator+fileName
+".txt");
//FileUtil.writeFile(str.getBytes(), downloadPath.getAbsolutePath());
if(str.indexOf("11") == -1){
str += "11";
FileUtil.appendFile(str, downloadPath.getAbsolutePath());
}
} */
@Override
protected void append(LoggingEvent loggingEvent) {
try {
StringBuffer buf = new StringBuffer();
buf.append(loggingEvent.getMessage()).append("\r\n");
// if layout doesn't handle exceptions, the appender has
// to do it
String[] s = loggingEvent.getThrowableStrRep();
if (s != null) {
for (int j = 0; j < s.length; j++) {
buf.append(s[j]);
}
}
File downloadPath = new File("d:" +File.separator+"data"+File.separator+"temp"+File.separator+fileName
+".txt");
if(downloadPath.exists()) downloadPath.createNewFile();
FileUtil.appendFile(downloadPath.getAbsolutePath(), buf.toString() );
//后成根据buf的日志做你自己想做的事情即可
} catch(Exception e) {
errorHandler.error(e.getLocalizedMessage());
}
}
@Override
public void close() {
// TODO Auto-generated method stub
}
@Override
public boolean requiresLayout() {
// TODO Auto-generated method stub
return false;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
}
20:05:44,757 ERROR STDERR log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable. 20:05:44,757 ERROR STDERR log4j:ERROR The class "org.apache.log4j.spi.ErrorHandler" was loaded by 20:05:44,757 ERROR STDERR log4j:ERROR [WebappClassLoaderDelegateFalseRepositories/WEBINF/Classes/ParentClassloaderjava.net.FactoryURLClassLoader31c43f|WebappClassLoader delegate: false repositories: /WEB-INF/classes/ -
> Parent Classloader: java.net.FactoryURLClassLoader@31c43f ] whereas object of type 20:05:44,757 ERROR
STDERR
log4j:ERROR "org.jboss.logging.util.OnlyOnceErrorHandler" was loaded by
Org.jboss.system.server.NoAnnotationURLClassLoaderab95e6
. 20:05:44,820 ERROR
STDERR
log4j:ERROR Could not create an Appender. Reported error follows.
解决办法:
These sort of exceptions occur if an application deployed on JBoss packages log4j and commons-logging related jars in its package. JBoss has its own versions of these jars in its lib folder which results in these conflicts.
Removing the log4j and commons-logging jars from your application's package will solve this issue.