/* * Zed Attack Proxy (ZAP) and its related class files. * * ZAP is an HTTP/HTTPS proxy for assessing web application security. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.zaproxy.zap.extension.log4j; import javax.swing.SwingUtilities; import org.apache.log4j.Level; import org.apache.log4j.WriterAppender; import org.apache.log4j.spi.LoggingEvent; import org.parosproxy.paros.view.View; import org.zaproxy.zap.view.ScanStatus; public class ZapOutputWriter extends WriterAppender { private final static char NEWLINE = '\n'; private ScanStatus scanStatus = null; public ZapOutputWriter(ScanStatus scanStatus) { if (!View.isInitialised()) { throw new IllegalStateException("View must be initialised."); } if (scanStatus == null) { throw new IllegalArgumentException("The parameter scanStatus must not be null."); } this.scanStatus = scanStatus; } @Override public void append(final LoggingEvent event) { if (event.getLevel().equals(Level.ERROR)) { if (! SwingUtilities.isEventDispatchThread()) { SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { append(event); }}); return; } scanStatus.incScanCount(); String renderedmessage=event.getRenderedMessage(); if (renderedmessage!=null) { View.getSingleton().getOutputPanel().append(new StringBuilder(renderedmessage).append(NEWLINE).toString()); } String [] tsr = event.getThrowableStrRep(); if (tsr != null) { StringBuilder eventThrowableStrRep = new StringBuilder(tsr.length*75);//Capacity is guessed, but more than 16 for sure for (String str : tsr) { eventThrowableStrRep.append(str).append(NEWLINE); } //Send it as a single string View.getSingleton().getOutputPanel().append(eventThrowableStrRep.toString()); } } } }