package com.mycompany.listeners;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogConfigurationException;
import org.apache.commons.logging.LogFactory;
import com.puppycrawl.tools.checkstyle.Checker;
import com.puppycrawl.tools.checkstyle.api.AuditEvent;
import com.puppycrawl.tools.checkstyle.api.AuditListener;
import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
import com.puppycrawl.tools.checkstyle.api.SeverityLevel;
/**
* Jakarta Commons Logging listener.
* Note: With Ant, do not use the SimpleLog as your logger implementation as it
* causes an infinite loop since it writes to System.err, which Ant traps
* and reroutes to the logger/listener layer.
* Based on
* <a href="http://ant.apache.org/index.html">org.apache.tools.ant.listener.CommonsLoggingListener>org.apache.tools.ant.listener.CommonsLoggingListener</a>
* @author Rick Giles
*/
public class CommonsLoggingListener
implements AuditListener
{
/** cushion for avoiding StringBuffer.expandCapacity */
private static final int BUFFER_CUSHION = 30;
/** true if the log factory has been initialized */
private boolean mInitialized = false;
/** Factory for creating org.apache.commons.logging.Log instances */
private LogFactory mLogFactory;
/**
* Creates a <code>CommonsLoggingListener. Initializes its log factory.
* @throws CheckstyleException if if the implementation class is not
* available or cannot be instantiated.
*/
public CommonsLoggingListener() throws CheckstyleException
{
try {
mLogFactory = LogFactory.getFactory();
}
catch (LogConfigurationException e) {
throw new CheckstyleException("log configuration exception", e);
}
mInitialized = true;
}
/** @see com.puppycrawl.tools.checkstyle.api.AuditListener */
public void auditStarted(AuditEvent aEvt)
{
if (mInitialized) {
final Log log = mLogFactory.getInstance(Checker.class);
log.info("Audit started.");
}
}
/** @see com.puppycrawl.tools.checkstyle.api.AuditListener */
public void auditFinished(AuditEvent aEvt)
{
if (mInitialized) {
final Log log = mLogFactory.getInstance(Checker.class);
log.info("Audit finished.");
}
}
/** @see com.puppycrawl.tools.checkstyle.api.AuditListener */
public void fileStarted(AuditEvent aEvt)
{
if (mInitialized) {
final Log log = mLogFactory.getInstance(Checker.class);
log.info("File \"" + aEvt.getFileName() + "\" started.");
}
}
/** @see com.puppycrawl.tools.checkstyle.api.AuditListener */
public void fileFinished(AuditEvent aEvt)
{
if (mInitialized) {
final Log log = mLogFactory.getInstance(Checker.class);
log.info("File \"" + aEvt.getFileName() + "\" finished.");
}
}
/** @see com.puppycrawl.tools.checkstyle.api.AuditListener */
public void addError(AuditEvent aEvt)
{
final SeverityLevel severityLevel = aEvt.getSeverityLevel();
if (mInitialized && !SeverityLevel.IGNORE.equals(severityLevel)) {
final Log log = mLogFactory.getInstance(aEvt.getSourceName());
final String fileName = aEvt.getFileName();
final String message = aEvt.getMessage();
// avoid StringBuffer.expandCapacity
final int bufLen = message.length() + BUFFER_CUSHION;
final StringBuffer sb = new StringBuffer(bufLen);
sb.append("Line: ").append(aEvt.getLine());
if (aEvt.getColumn() > 0) {
sb.append(" Column: ").append(aEvt.getColumn());
}
sb.append(" Message: ").append(message);
if (aEvt.getSeverityLevel().equals(SeverityLevel.WARNING)) {
log.warn(sb.toString());
}
else if (aEvt.getSeverityLevel().equals(SeverityLevel.INFO)) {
log.info(sb.toString());
}
else {
log.error(sb.toString());
}
}
}
/** @see com.puppycrawl.tools.checkstyle.api.AuditListener */
public void addException(AuditEvent aEvt, Throwable aThrowable)
{
if (mInitialized) {
final Log log = mLogFactory.getInstance(aEvt.getSourceName());
log.error("Error auditing " + aEvt.getFileName(), aThrowable);
}
}
}