From 440edce28895408b58cbb52d0266976d36e5f696 Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Wed, 19 Jul 2017 15:00:50 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-1013=20=E7=94=A8log4j=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../loghandler/DesignerLogAppendThread.java | 60 ------------------- .../loghandler/DesignerLogAppender.java | 42 +++++++++++++ .../loghandler/DesignerLogHandler.java | 37 ++++++++++-- .../com/fr/design/module/DesignModule.java | 5 -- designer_base/src/com/fr/env/RemoteEnv.java | 4 +- 5 files changed, 74 insertions(+), 74 deletions(-) delete mode 100644 designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppendThread.java create mode 100644 designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppender.java diff --git a/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppendThread.java b/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppendThread.java deleted file mode 100644 index 12d281627..000000000 --- a/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppendThread.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.fr.design.mainframe.loghandler; - -import com.fr.general.LogRecordTime; -import com.fr.stable.StringUtils; -import org.apache.log4j.Appender; -import org.apache.log4j.Logger; -import org.apache.log4j.WriterAppender; - -import java.io.PipedReader; -import java.io.PipedWriter; -import java.io.Writer; -import java.util.Date; -import java.util.Scanner; -import java.util.logging.Level; -import java.util.logging.LogRecord; - -/** - * Created by Administrator on 2017/6/2/0002. - */ -public class DesignerLogAppendThread extends Thread{ - - PipedReader reader; - - public DesignerLogAppendThread() { - Logger root = Logger.getRootLogger(); - // 获取子记录器的输出源 - Appender appender = root.getAppender("design"); - // 定义一个未连接的输入流管道 - reader = new PipedReader(); - // 定义一个已连接的输出流管理,并连接到reader - Writer writer = null; - try { - writer = new PipedWriter(reader); - // 设置 appender 输出流 - ((WriterAppender) appender).setWriter(writer); - } catch (Throwable e) { - } - } - - public void run() { - // 不间断地扫描输入流 - Scanner scanner = new Scanner(reader); - - // 将扫描到的字符流打印在屏目 - while (scanner.hasNext()) { - try { - Thread.sleep(100); - String log = scanner.nextLine(); - if (StringUtils.isEmpty(log)) { - return; - } - - LogRecordTime logRecordTime = new LogRecordTime(new Date(),new LogRecord(Level.INFO, log)); - DesignerLogHandler.getInstance().printRemoteLog(logRecordTime); - } catch (Throwable e) { - - } - } - } -} diff --git a/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppender.java b/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppender.java new file mode 100644 index 000000000..ab63250ce --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogAppender.java @@ -0,0 +1,42 @@ +package com.fr.design.mainframe.loghandler; + +import org.apache.log4j.AppenderSkeleton; +import org.apache.log4j.Level; +import org.apache.log4j.spi.LoggingEvent; + +import java.util.Date; + +/** + * Created by Administrator on 2017/7/18 0018. + */ +public class DesignerLogAppender extends AppenderSkeleton { + + public DesignerLogAppender() { + this.layout = new org.apache.log4j.PatternLayout("%d{HH\\:mm\\:ss} %t %p [%c] %m%n"); + } + + protected void append(LoggingEvent event) { + this.subAppend(event); + } + + public boolean requiresLayout() { + return true; + } + + public synchronized void close() { + if (this.closed) { + return; + } + this.closed = true; + + } + + public void subAppend(LoggingEvent event) { + synchronized (DesignerLogHandler.getInstance()) { + Level level = event.getLevel(); + String msg = this.layout.format(event); + DesignerLogHandler.getInstance().printRemoteLog(msg, level, new Date()); + } + } +} + diff --git a/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index ddf301fd2..a844fd3a2 100644 --- a/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer_base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -6,11 +6,10 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogLevel; -import com.fr.general.Inter; -import com.fr.general.LogRecordTime; +import com.fr.general.*; +import com.fr.stable.EnvChangedListener; import com.fr.stable.xml.LogRecordTimeProvider; +import org.apache.log4j.Level; import javax.swing.*; import javax.swing.text.*; @@ -31,6 +30,16 @@ public class DesignerLogHandler { private static final int ERRO_GAP_Y = -40; private static final int SERVER_GAP_Y = -20; + static { + GeneralContext.addEnvChangedListener(new EnvChangedListener() { + @Override + public void envChanged() { + // envchange后需要重新读取webinf里的log4j配置, 重新添加appender + FRLogger.getLogger().addLogAppender(new DesignerLogAppender()); + } + }); + } + public static DesignerLogHandler getInstance() { return HOLDER.singleton; } @@ -116,8 +125,8 @@ public class DesignerLogHandler { return caption; } - public void printRemoteLog(LogRecordTime logRecordTime) { - logHandlerArea.printStackTrace(logRecordTime); + public void printRemoteLog(String message, Level level, Date date) { + logHandlerArea.printStackTrace(message, level, date); } private class LogHandlerArea extends JPanel { @@ -201,6 +210,22 @@ public class DesignerLogHandler { } + public void printStackTrace(String message, Level level, Date date) { + int logLevelvalue = level.toInt(); + if (logLevelvalue == INFO_INT && showInfo.isSelected()) { + printMessage(message, logLevelvalue, date); + } else if (logLevelvalue == ERRO_INT && showError.isSelected()) { + printMessage(message, logLevelvalue, date); + } else if (logLevelvalue == SERVER_INT && showServer.isSelected()) { + printMessage(message, logLevelvalue, date); + } + + } + + private void printMessage(String message, int logLevelvalue, Date date) { + printMessage(message, logLevelvalue, date, null); + } + private void printMessage(String messange, int logLevelvalue, Date date, Throwable e) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); this.log(simpleDateFormat.format(date) + "\n", 0); diff --git a/designer_base/src/com/fr/design/module/DesignModule.java b/designer_base/src/com/fr/design/module/DesignModule.java index 1929452b9..6fb9b2ac5 100644 --- a/designer_base/src/com/fr/design/module/DesignModule.java +++ b/designer_base/src/com/fr/design/module/DesignModule.java @@ -12,7 +12,6 @@ import com.fr.design.javascript.JavaScriptImplPane; import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.mainframe.App; import com.fr.design.mainframe.DesignerFrame; -import com.fr.design.mainframe.loghandler.DesignerLogAppendThread; import com.fr.general.Inter; import com.fr.general.ModuleContext; import com.fr.js.*; @@ -45,10 +44,6 @@ public abstract class DesignModule extends TopModule { ActionFactory.registerCellInsertActionClass(actionsForInsertCellElement()); ActionFactory.registerFloatInsertActionClass(actionsForInsertFloatElement()); DesignModuleFactory.registerCreators4Hyperlink(hyperlinkTypes()); - - // 将log4j日志输出到设计器日志面板的线程. - DesignerLogAppendThread logTread = new DesignerLogAppendThread(); - logTread.start(); } public boolean isStarted() { diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index 4ef8d61e1..8fd63a18e 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -17,7 +17,6 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; -import com.fr.design.mainframe.loghandler.DesignerLogHandler; import com.fr.file.CacheManager; import com.fr.file.DatasourceManager; import com.fr.file.DatasourceManagerProvider; @@ -1788,8 +1787,7 @@ public class RemoteEnv extends AbstractEnv { } LogRecordTime[] records = DavXMLUtils.readXMLLogRecords(input); for (LogRecordTime logRecordTime : records) { - DesignerLogHandler.getInstance().printRemoteLog(logRecordTime); - + //TODO } }