You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gr...@apache.org on 2012/06/02 13:41:11 UTC
svn commit: r1345492 [16/18] - in /logging/log4j/branches/log4j12modules: ./
contribs/ contribs/CekiGulcu/ contribs/EirikLygre/ contribs/JamesHouse/
contribs/Jamie Tsao/ contribs/JimMoore/ contribs/KevinSteppe/
contribs/KitchingSimon/ contribs/LeosLite...
Added: logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/TreeModelAdapter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/TreeModelAdapter.java?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/TreeModelAdapter.java (added)
+++ logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/TreeModelAdapter.java Sat Jun 2 11:40:31 2012
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.log4j.lf5.viewer.categoryexplorer;
+
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+
+/**
+ * Default implementation of TreeModelListener which does nothing.
+ *
+ * @author Richard Wan
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class TreeModelAdapter implements TreeModelListener {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+ public void treeNodesChanged(TreeModelEvent e) {
+ }
+
+ public void treeNodesInserted(TreeModelEvent e) {
+ }
+
+ public void treeNodesRemoved(TreeModelEvent e) {
+ }
+
+ public void treeStructureChanged(TreeModelEvent e) {
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces
+ //--------------------------------------------------------------------------
+}
+
Propchange: logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/TreeModelAdapter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/ConfigurationManager.java?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/ConfigurationManager.java (added)
+++ logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/ConfigurationManager.java Sat Jun 2 11:40:31 2012
@@ -0,0 +1,466 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.log4j.lf5.viewer.configure;
+
+import java.awt.Color;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.tree.TreePath;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.log4j.lf5.LogLevel;
+import org.apache.log4j.lf5.LogLevelFormatException;
+import org.apache.log4j.lf5.viewer.LogBrokerMonitor;
+import org.apache.log4j.lf5.viewer.LogTable;
+import org.apache.log4j.lf5.viewer.LogTableColumn;
+import org.apache.log4j.lf5.viewer.LogTableColumnFormatException;
+import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryExplorerModel;
+import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryExplorerTree;
+import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryNode;
+import org.apache.log4j.lf5.viewer.categoryexplorer.CategoryPath;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * <p>ConfigurationManager handles the storage and retrival of the state of
+ * the CategoryExplorer
+ *
+ * @author Richard Hurst
+ * @author Brad Marlborough
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class ConfigurationManager extends Object {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+ private static final String CONFIG_FILE_NAME = "lf5_configuration.xml";
+ private static final String NAME = "name";
+ private static final String PATH = "path";
+ private static final String SELECTED = "selected";
+ private static final String EXPANDED = "expanded";
+ private static final String CATEGORY = "category";
+ private static final String FIRST_CATEGORY_NAME = "Categories";
+ private static final String LEVEL = "level";
+ private static final String COLORLEVEL = "colorlevel";
+ private static final String RED = "red";
+ private static final String GREEN = "green";
+ private static final String BLUE = "blue";
+ private static final String COLUMN = "column";
+ private static final String NDCTEXTFILTER = "searchtext";
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+ private LogBrokerMonitor _monitor = null;
+ private LogTable _table = null;
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+ public ConfigurationManager(LogBrokerMonitor monitor, LogTable table) {
+ super();
+ _monitor = monitor;
+ _table = table;
+ load();
+ }
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public void save() {
+ CategoryExplorerModel model = _monitor.getCategoryExplorerTree().getExplorerModel();
+ CategoryNode root = model.getRootCategoryNode();
+
+ StringBuffer xml = new StringBuffer(2048);
+ openXMLDocument(xml);
+ openConfigurationXML(xml);
+ processLogRecordFilter(_monitor.getNDCTextFilter(), xml);
+ processLogLevels(_monitor.getLogLevelMenuItems(), xml);
+ processLogLevelColors(_monitor.getLogLevelMenuItems(),
+ LogLevel.getLogLevelColorMap(), xml);
+ processLogTableColumns(LogTableColumn.getLogTableColumns(), xml);
+ processConfigurationNode(root, xml);
+ closeConfigurationXML(xml);
+ store(xml.toString());
+ }
+
+ public void reset() {
+ deleteConfigurationFile();
+ collapseTree();
+ selectAllNodes();
+ }
+
+ public static String treePathToString(TreePath path) {
+ // count begins at one so as to not include the 'Categories' - root category
+ StringBuffer sb = new StringBuffer();
+ CategoryNode n = null;
+ Object[] objects = path.getPath();
+ for (int i = 1; i < objects.length; i++) {
+ n = (CategoryNode) objects[i];
+ if (i > 1) {
+ sb.append(".");
+ }
+ sb.append(n.getTitle());
+ }
+ return sb.toString();
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+ protected void load() {
+ File file = new File(getFilename());
+ if (file.exists()) {
+ try {
+ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.
+ newInstance();
+ DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.parse(file);
+ processRecordFilter(doc);
+ processCategories(doc);
+ processLogLevels(doc);
+ processLogLevelColors(doc);
+ processLogTableColumns(doc);
+ } catch (Exception e) {
+ // ignore all error and just continue as if there was no
+ // configuration xml file but do report a message
+ System.err.println("Unable process configuration file at " +
+ getFilename() + ". Error Message=" + e.getMessage());
+ }
+ }
+
+ }
+
+ // Added in version 1.2 - reads in the NDC text filter from the
+ // xml configuration file. If the value of the filter is not null
+ // or an empty string ("") then the manager will set the LogBrokerMonitor's
+ // LogRecordFilter to use the NDC LogRecordFilter. Otherwise, the
+ // LogBrokerMonitor will use the default LogRecordFilter.
+ protected void processRecordFilter(Document doc) {
+ NodeList nodeList = doc.getElementsByTagName(NDCTEXTFILTER);
+
+ // there is only one value stored
+ Node n = nodeList.item(0);
+ // add check for backwards compatibility as this feature was added in
+ // version 1.2
+ if (n == null) {
+ return;
+ }
+
+ NamedNodeMap map = n.getAttributes();
+ String text = getValue(map, NAME);
+
+ if (text == null || text.equals("")) {
+ return;
+ }
+ _monitor.setNDCLogRecordFilter(text);
+ }
+
+ protected void processCategories(Document doc) {
+ CategoryExplorerTree tree = _monitor.getCategoryExplorerTree();
+ CategoryExplorerModel model = tree.getExplorerModel();
+ NodeList nodeList = doc.getElementsByTagName(CATEGORY);
+
+ // determine where the starting node is
+ NamedNodeMap map = nodeList.item(0).getAttributes();
+ int j = (getValue(map, NAME).equalsIgnoreCase(FIRST_CATEGORY_NAME)) ? 1 : 0;
+ // iterate backwards throught the nodeList so that expansion of the
+ // list can occur
+ for (int i = nodeList.getLength() - 1; i >= j; i--) {
+ Node n = nodeList.item(i);
+ map = n.getAttributes();
+ CategoryNode chnode = model.addCategory(new CategoryPath(getValue(map, PATH)));
+ chnode.setSelected((getValue(map, SELECTED).equalsIgnoreCase("true")) ? true : false);
+ if (getValue(map, EXPANDED).equalsIgnoreCase("true")) ;
+ tree.expandPath(model.getTreePathToRoot(chnode));
+ }
+
+ }
+
+ protected void processLogLevels(Document doc) {
+ NodeList nodeList = doc.getElementsByTagName(LEVEL);
+ Map menuItems = _monitor.getLogLevelMenuItems();
+
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node n = nodeList.item(i);
+ NamedNodeMap map = n.getAttributes();
+ String name = getValue(map, NAME);
+ try {
+ JCheckBoxMenuItem item =
+ (JCheckBoxMenuItem) menuItems.get(LogLevel.valueOf(name));
+ item.setSelected(getValue(map, SELECTED).equalsIgnoreCase("true"));
+ } catch (LogLevelFormatException e) {
+ // ignore it will be on by default.
+ }
+ }
+ }
+
+ protected void processLogLevelColors(Document doc) {
+ NodeList nodeList = doc.getElementsByTagName(COLORLEVEL);
+ LogLevel.getLogLevelColorMap();
+
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node n = nodeList.item(i);
+ // check for backwards compatibility since this feature was added
+ // in version 1.3
+ if (n == null) {
+ return;
+ }
+
+ NamedNodeMap map = n.getAttributes();
+ String name = getValue(map, NAME);
+ try {
+ LogLevel level = LogLevel.valueOf(name);
+ int red = Integer.parseInt(getValue(map, RED));
+ int green = Integer.parseInt(getValue(map, GREEN));
+ int blue = Integer.parseInt(getValue(map, BLUE));
+ Color c = new Color(red, green, blue);
+ if (level != null) {
+ level.setLogLevelColorMap(level, c);
+ }
+
+ } catch (LogLevelFormatException e) {
+ // ignore it will be on by default.
+ }
+ }
+ }
+
+ protected void processLogTableColumns(Document doc) {
+ NodeList nodeList = doc.getElementsByTagName(COLUMN);
+ Map menuItems = _monitor.getLogTableColumnMenuItems();
+ List selectedColumns = new ArrayList();
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node n = nodeList.item(i);
+ // check for backwards compatibility since this feature was added
+ // in version 1.3
+ if (n == null) {
+ return;
+ }
+ NamedNodeMap map = n.getAttributes();
+ String name = getValue(map, NAME);
+ try {
+ LogTableColumn column = LogTableColumn.valueOf(name);
+ JCheckBoxMenuItem item =
+ (JCheckBoxMenuItem) menuItems.get(column);
+ item.setSelected(getValue(map, SELECTED).equalsIgnoreCase("true"));
+
+ if (item.isSelected()) {
+ selectedColumns.add(column);
+ }
+ } catch (LogTableColumnFormatException e) {
+ // ignore it will be on by default.
+ }
+
+ if (selectedColumns.isEmpty()) {
+ _table.setDetailedView();
+ } else {
+ _table.setView(selectedColumns);
+ }
+
+ }
+ }
+
+ protected String getValue(NamedNodeMap map, String attr) {
+ Node n = map.getNamedItem(attr);
+ return n.getNodeValue();
+ }
+
+ protected void collapseTree() {
+ // collapse everything except the first category
+ CategoryExplorerTree tree = _monitor.getCategoryExplorerTree();
+ for (int i = tree.getRowCount() - 1; i > 0; i--) {
+ tree.collapseRow(i);
+ }
+ }
+
+ protected void selectAllNodes() {
+ CategoryExplorerModel model = _monitor.getCategoryExplorerTree().getExplorerModel();
+ CategoryNode root = model.getRootCategoryNode();
+ Enumeration all = root.breadthFirstEnumeration();
+ CategoryNode n = null;
+ while (all.hasMoreElements()) {
+ n = (CategoryNode) all.nextElement();
+ n.setSelected(true);
+ }
+ }
+
+ protected void store(String s) {
+
+ try {
+ PrintWriter writer = new PrintWriter(new FileWriter(getFilename()));
+ writer.print(s);
+ writer.close();
+ } catch (IOException e) {
+ // do something with this error.
+ e.printStackTrace();
+ }
+
+ }
+
+ protected void deleteConfigurationFile() {
+ try {
+ File f = new File(getFilename());
+ if (f.exists()) {
+ f.delete();
+ }
+ } catch (SecurityException e) {
+ System.err.println("Cannot delete " + getFilename() +
+ " because a security violation occured.");
+ }
+ }
+
+ protected String getFilename() {
+ String home = System.getProperty("user.home");
+ String sep = System.getProperty("file.separator");
+
+ return home + sep + "lf5" + sep + CONFIG_FILE_NAME;
+ }
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+ private void processConfigurationNode(CategoryNode node, StringBuffer xml) {
+ CategoryExplorerModel model = _monitor.getCategoryExplorerTree().getExplorerModel();
+
+ Enumeration all = node.breadthFirstEnumeration();
+ CategoryNode n = null;
+ while (all.hasMoreElements()) {
+ n = (CategoryNode) all.nextElement();
+ exportXMLElement(n, model.getTreePathToRoot(n), xml);
+ }
+
+ }
+
+ private void processLogLevels(Map logLevelMenuItems, StringBuffer xml) {
+ xml.append("\t<loglevels>\r\n");
+ Iterator it = logLevelMenuItems.keySet().iterator();
+ while (it.hasNext()) {
+ LogLevel level = (LogLevel) it.next();
+ JCheckBoxMenuItem item = (JCheckBoxMenuItem) logLevelMenuItems.get(level);
+ exportLogLevelXMLElement(level.getLabel(), item.isSelected(), xml);
+ }
+
+ xml.append("\t</loglevels>\r\n");
+ }
+
+ private void processLogLevelColors(Map logLevelMenuItems, Map logLevelColors, StringBuffer xml) {
+ xml.append("\t<loglevelcolors>\r\n");
+ // iterate through the list of log levels being used (log4j, jdk1.4, custom levels)
+ Iterator it = logLevelMenuItems.keySet().iterator();
+ while (it.hasNext()) {
+ LogLevel level = (LogLevel) it.next();
+ // for each level, get the associated color from the log level color map
+ Color color = (Color) logLevelColors.get(level);
+ exportLogLevelColorXMLElement(level.getLabel(), color, xml);
+ }
+
+ xml.append("\t</loglevelcolors>\r\n");
+ }
+
+
+ private void processLogTableColumns(List logTableColumnMenuItems, StringBuffer xml) {
+ xml.append("\t<logtablecolumns>\r\n");
+ Iterator it = logTableColumnMenuItems.iterator();
+ while (it.hasNext()) {
+ LogTableColumn column = (LogTableColumn) it.next();
+ JCheckBoxMenuItem item = _monitor.getTableColumnMenuItem(column);
+ exportLogTableColumnXMLElement(column.getLabel(), item.isSelected(), xml);
+ }
+
+ xml.append("\t</logtablecolumns>\r\n");
+ }
+
+ // Added in version 1.2 - stores the NDC text filter in the xml file
+ // for future use.
+ private void processLogRecordFilter(String text, StringBuffer xml) {
+ xml.append("\t<").append(NDCTEXTFILTER).append(" ");
+ xml.append(NAME).append("=\"").append(text).append("\"");
+ xml.append("/>\r\n");
+ }
+
+ private void openXMLDocument(StringBuffer xml) {
+ xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");
+ }
+
+ private void openConfigurationXML(StringBuffer xml) {
+ xml.append("<configuration>\r\n");
+ }
+
+ private void closeConfigurationXML(StringBuffer xml) {
+ xml.append("</configuration>\r\n");
+ }
+
+ private void exportXMLElement(CategoryNode node, TreePath path, StringBuffer xml) {
+ CategoryExplorerTree tree = _monitor.getCategoryExplorerTree();
+
+ xml.append("\t<").append(CATEGORY).append(" ");
+ xml.append(NAME).append("=\"").append(node.getTitle()).append("\" ");
+ xml.append(PATH).append("=\"").append(treePathToString(path)).append("\" ");
+ xml.append(EXPANDED).append("=\"").append(tree.isExpanded(path)).append("\" ");
+ xml.append(SELECTED).append("=\"").append(node.isSelected()).append("\"/>\r\n");
+ }
+
+ private void exportLogLevelXMLElement(String label, boolean selected, StringBuffer xml) {
+ xml.append("\t\t<").append(LEVEL).append(" ").append(NAME);
+ xml.append("=\"").append(label).append("\" ");
+ xml.append(SELECTED).append("=\"").append(selected);
+ xml.append("\"/>\r\n");
+ }
+
+ private void exportLogLevelColorXMLElement(String label, Color color, StringBuffer xml) {
+ xml.append("\t\t<").append(COLORLEVEL).append(" ").append(NAME);
+ xml.append("=\"").append(label).append("\" ");
+ xml.append(RED).append("=\"").append(color.getRed()).append("\" ");
+ xml.append(GREEN).append("=\"").append(color.getGreen()).append("\" ");
+ xml.append(BLUE).append("=\"").append(color.getBlue());
+ xml.append("\"/>\r\n");
+ }
+
+ private void exportLogTableColumnXMLElement(String label, boolean selected, StringBuffer xml) {
+ xml.append("\t\t<").append(COLUMN).append(" ").append(NAME);
+ xml.append("=\"").append(label).append("\" ");
+ xml.append(SELECTED).append("=\"").append(selected);
+ xml.append("\"/>\r\n");
+ }
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/ConfigurationManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/MRUFileManager.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/MRUFileManager.java?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/MRUFileManager.java (added)
+++ logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/MRUFileManager.java Sat Jun 2 11:40:31 2012
@@ -0,0 +1,293 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.log4j.lf5.viewer.configure;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+
+/**
+ * <p>MRUFileManager handles the storage and retrival the most
+ * recently opened log files.
+ *
+ * @author Brad Marlborough
+ * @author Richard Hurst
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class MRUFileManager {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+ private static final String CONFIG_FILE_NAME = "mru_file_manager";
+ private static final int DEFAULT_MAX_SIZE = 3;
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+ private int _maxSize = 0;
+ private LinkedList _mruFileList;
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+ public MRUFileManager() {
+ load();
+ setMaxSize(DEFAULT_MAX_SIZE);
+ }
+
+ public MRUFileManager(int maxSize) {
+ load();
+ setMaxSize(maxSize);
+ }
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ /**
+ * Saves a list of MRU files out to a file.
+ */
+ public void save() {
+ File file = new File(getFilename());
+
+ try {
+ ObjectOutputStream oos = new ObjectOutputStream(new
+ FileOutputStream(file));
+ oos.writeObject(_mruFileList);
+ oos.flush();
+ oos.close();
+ } catch (Exception e) {
+ // do nothing
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Gets the size of the MRU file list.
+ */
+ public int size() {
+ return _mruFileList.size();
+ }
+
+ /**
+ * Returns a particular file name stored in a MRU file
+ * list based on an index value.
+ */
+ public Object getFile(int index) {
+ if (index < size()) {
+ return _mruFileList.get(index);
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns a input stream to the resource at the specified index
+ */
+ public InputStream getInputStream(int index) throws IOException,
+ FileNotFoundException {
+ if (index < size()) {
+ Object o = getFile(index);
+ if (o instanceof File) {
+ return getInputStream((File) o);
+ } else {
+ return getInputStream((URL) o);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Adds a file name to the MRU file list.
+ */
+ public void set(File file) {
+ setMRU(file);
+ }
+
+ /**
+ * Adds a url to the MRU file list.
+ */
+ public void set(URL url) {
+ setMRU(url);
+ }
+
+ /**
+ * Gets the list of files stored in the MRU file list.
+ */
+ public String[] getMRUFileList() {
+ if (size() == 0) {
+ return null;
+ }
+
+ String[] ss = new String[size()];
+
+ for (int i = 0; i < size(); i++) {
+ Object o = getFile(i);
+ if (o instanceof File) {
+ ss[i] = ((File) o).getAbsolutePath();
+ } else // must be a url
+ {
+ ss[i] = o.toString();
+ }
+
+ }
+
+ return ss;
+ }
+
+ /**
+ * Moves the the index to the top of the MRU List
+ *
+ * @param index The index to be first in the mru list
+ */
+ public void moveToTop(int index) {
+ _mruFileList.add(0, _mruFileList.remove(index));
+ }
+
+ /**
+ * Creates the directory where the MRU file list will be written.
+ * The "lf5" directory is created in the Documents and Settings
+ * directory on Windows 2000 machines and where ever the user.home
+ * variable points on all other platforms.
+ */
+ public static void createConfigurationDirectory() {
+ String home = System.getProperty("user.home");
+ String sep = System.getProperty("file.separator");
+ File f = new File(home + sep + "lf5");
+ if (!f.exists()) {
+ try {
+ f.mkdir();
+ } catch (SecurityException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+ /**
+ * Gets an input stream for the corresponding file.
+ *
+ * @param file The file to create the input stream from.
+ * @return InputStream
+ */
+ protected InputStream getInputStream(File file) throws IOException,
+ FileNotFoundException {
+ BufferedInputStream reader =
+ new BufferedInputStream(new FileInputStream(file));
+
+ return reader;
+ }
+
+ /**
+ * Gets an input stream for the corresponding URL.
+ *
+ * @param url The url to create the input stream from.
+ * @return InputStream
+ */
+ protected InputStream getInputStream(URL url) throws IOException {
+ return url.openStream();
+ }
+
+ /**
+ * Adds an object to the mru.
+ */
+ protected void setMRU(Object o) {
+ int index = _mruFileList.indexOf(o);
+
+ if (index == -1) {
+ _mruFileList.add(0, o);
+ setMaxSize(_maxSize);
+ } else {
+ moveToTop(index);
+ }
+ }
+
+ /**
+ * Loads the MRU file list in from a file and stores it in a LinkedList.
+ * If no file exists, a new LinkedList is created.
+ */
+ protected void load() {
+ createConfigurationDirectory();
+ File file = new File(getFilename());
+ if (file.exists()) {
+ try {
+ ObjectInputStream ois = new ObjectInputStream(
+ new FileInputStream(file));
+ _mruFileList = (LinkedList) ois.readObject();
+ ois.close();
+
+ // check that only files and url are in linked list
+ Iterator it = _mruFileList.iterator();
+ while (it.hasNext()) {
+ Object o = it.next();
+ if (!(o instanceof File) && !(o instanceof URL)) {
+ it.remove();
+ }
+ }
+ } catch (Exception e) {
+ _mruFileList = new LinkedList();
+ }
+ } else {
+ _mruFileList = new LinkedList();
+ }
+
+ }
+
+ protected String getFilename() {
+ String home = System.getProperty("user.home");
+ String sep = System.getProperty("file.separator");
+
+ return home + sep + "lf5" + sep + CONFIG_FILE_NAME;
+ }
+
+ /**
+ * Ensures that the MRU list will have a MaxSize.
+ */
+ protected void setMaxSize(int maxSize) {
+ if (maxSize < _mruFileList.size()) {
+ for (int i = 0; i < _mruFileList.size() - maxSize; i++) {
+ _mruFileList.removeLast();
+ }
+ }
+
+ _maxSize = maxSize;
+ }
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces
+ //--------------------------------------------------------------------------
+}
\ No newline at end of file
Propchange: logging/log4j/branches/log4j12modules/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/configure/MRUFileManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties (added)
+++ logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties Sat Jun 2 11:40:31 2012
@@ -0,0 +1,31 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+# For the general syntax of property based configuration files see the
+# documenation of org.apache.log4j.PropertyConfigurator.
+
+# The root category uses the appender called A1. Since no priority is
+# specified, the root category assumes the default priority for root
+# which is DEBUG in log4j. The root category is the only category that
+# has a default priority. All other categories need not be assigned a
+# priority in which case they inherit their priority from the
+# hierarchy.
+
+log4j.rootCategory=, A1
+
+# A1 is set to be a LogMonitorAppender which outputs to a swing
+# logging console.
+
+log4j.appender.A1=org.apache.log4j.lf5.LF5Appender
Propchange: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/config/defaultconfig.properties
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_new.gif
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_new.gif?rev=1345492&view=auto
==============================================================================
Binary file - no diff available.
Propchange: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_new.gif
------------------------------------------------------------------------------
svn:mime-type = image/gif
Added: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_satellite.gif
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_satellite.gif?rev=1345492&view=auto
==============================================================================
Binary file - no diff available.
Propchange: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/channelexplorer_satellite.gif
------------------------------------------------------------------------------
svn:mime-type = image/gif
Added: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/lf5_small_icon.gif
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/lf5_small_icon.gif?rev=1345492&view=auto
==============================================================================
Binary file - no diff available.
Propchange: logging/log4j/branches/log4j12modules/modules/lf5/src/main/resources/org/apache/log4j/lf5/viewer/images/lf5_small_icon.gif
------------------------------------------------------------------------------
svn:mime-type = image/gif
Added: logging/log4j/branches/log4j12modules/modules/net/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/pom.xml?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/net/pom.xml (added)
+++ logging/log4j/branches/log4j12modules/modules/net/pom.xml Sat Jun 2 11:40:31 2012
@@ -0,0 +1,65 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.log4j</groupId>
+ <artifactId>log4j-modules</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ </parent>
+ <groupId>org.apache.log4j</groupId>
+ <artifactId>log4j-net</artifactId>
+ <name>Apache Log4j-Net</name>
+ <description>Apache Log4j Network Module</description>
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.0.1</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Export-Package>org.apache.log4j.net.*</Export-Package>
+ <Import-Package>javax.mail.*;resolution:=optional,
+ *</Import-Package>
+ <Bundle-DocURL>http://logging.apache.org/log4j</Bundle-DocURL>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4.1</version>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
Propchange: logging/log4j/branches/log4j12modules/modules/net/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSAppender.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/JMSAppender.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSAppender.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSAppender.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/JMSAppender.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSAppender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSAppender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSSink.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/JMSSink.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSSink.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSSink.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/JMSSink.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSSink.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/JMSSink.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SMTPAppender.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SMTPAppender.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SMTPAppender.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SMTPAppender.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SMTPAppender.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SMTPAppender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SMTPAppender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SimpleSocketServer.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SimpleSocketServer.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SimpleSocketServer.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SimpleSocketServer.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SimpleSocketServer.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SimpleSocketServer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SimpleSocketServer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketAppender.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketAppender.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketAppender.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketAppender.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketAppender.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketAppender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketAppender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketHubAppender.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketHubAppender.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketHubAppender.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketHubAppender.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketHubAppender.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketHubAppender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketHubAppender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketNode.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketNode.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketNode.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketNode.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketNode.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketNode.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketNode.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketServer.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketServer.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketServer.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketServer.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SocketServer.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketServer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SocketServer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SyslogAppender.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SyslogAppender.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SyslogAppender.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SyslogAppender.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/SyslogAppender.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SyslogAppender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/SyslogAppender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/TelnetAppender.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/TelnetAppender.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/TelnetAppender.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/TelnetAppender.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/TelnetAppender.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/TelnetAppender.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/TelnetAppender.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/ZeroConfSupport.java (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/ZeroConfSupport.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/ZeroConfSupport.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/ZeroConfSupport.java&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/ZeroConfSupport.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/ZeroConfSupport.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/package.html (from r1345481, logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/package.html)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/package.html?p2=logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/package.html&p1=logging/log4j/branches/log4j12modules/src/main/java/org/apache/log4j/net/package.html&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/package.html
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/main/java/org/apache/log4j/net/package.html
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SMTPAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SMTPAppenderTest.java?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SMTPAppenderTest.java (added)
+++ logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SMTPAppenderTest.java Sat Jun 2 11:40:31 2012
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.log4j.net;
+
+import junit.framework.TestCase;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.spi.TriggeringEventEvaluator;
+import org.apache.log4j.xml.DOMConfigurator;
+
+/**
+ * Tests for SMTPAppender.
+ */
+public class SMTPAppenderTest extends TestCase {
+ public SMTPAppenderTest(final String testName) {
+ super(testName);
+ }
+
+ /**
+ * Reset configuration after every test.
+ */
+ public void tearDown() {
+ LogManager.resetConfiguration();
+ }
+
+ /**
+ * Trivial implementation of TriggeringEventEvaluator.
+ */
+ public static final class MockTriggeringEventEvaluator implements TriggeringEventEvaluator {
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isTriggeringEvent(final LoggingEvent event) {
+ return true;
+ }
+ }
+
+ /**
+ * Tests that triggeringPolicy element will set evaluator.
+ */
+ public void testTrigger() {
+ DOMConfigurator.configure("target/test-classes/input/xml/smtpAppender1.xml");
+ SMTPAppender appender = (SMTPAppender) Logger.getRootLogger().getAppender("A1");
+ TriggeringEventEvaluator evaluator = appender.getEvaluator();
+ assertTrue(evaluator instanceof MockTriggeringEventEvaluator);
+ }
+}
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SMTPAppenderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/ShortSocketServer.java (from r1345481, logging/log4j/branches/log4j12modules/tests/src/java/org/apache/log4j/net/ShortSocketServer.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/ShortSocketServer.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/ShortSocketServer.java&p1=logging/log4j/branches/log4j12modules/tests/src/java/org/apache/log4j/net/ShortSocketServer.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/ShortSocketServer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/ShortSocketServer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketAppenderTest.java?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketAppenderTest.java (added)
+++ logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketAppenderTest.java Sat Jun 2 11:40:31 2012
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.log4j.net;
+
+import junit.framework.TestCase;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.Logger;
+import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.xml.DOMConfigurator;
+
+public class SocketAppenderTest extends TestCase {
+
+ /**
+ * Create new instance.
+ */
+ public SocketAppenderTest(final String testName) {
+ super(testName);
+ }
+
+ /* JUnit's setUp and tearDown */
+
+ protected void setUp() {
+ DOMConfigurator.configure("target/test-classes/input/xml/SocketAppenderTestConfig.xml");
+
+ logger = Logger.getLogger(SocketAppenderTest.class);
+ secondary = (LastOnlyAppender) Logger.getLogger(
+ "org.apache.log4j.net.SocketAppenderTestDummy").getAppender("lastOnly");
+ }
+
+ protected void tearDown() {
+ }
+
+ /* Tests */
+
+ public void testFallbackErrorHandlerWhenStarting() {
+ String msg = "testFallbackErrorHandlerWhenStarting";
+ logger.debug(msg);
+
+ // above debug log will fail and shoul be redirected to secondary appender
+ assertEquals("SocketAppender with FallbackErrorHandler", msg, secondary.getLastMessage());
+ }
+
+ /* Fields */
+
+ private static Logger logger;
+ private static LastOnlyAppender secondary;
+
+ /* Inner classes */
+
+ /**
+ * Inner-class For debugging purposes only Saves last LoggerEvent
+ */
+ static public class LastOnlyAppender extends AppenderSkeleton {
+ protected void append(LoggingEvent event) {
+ this.lastEvent = event;
+ }
+
+ public boolean requiresLayout() {
+ return false;
+ }
+
+ public void close() {
+ this.closed = true;
+ }
+
+ /**
+ * @return last appended LoggingEvent's message
+ */
+ public String getLastMessage() {
+ if (this.lastEvent != null)
+ return this.lastEvent.getMessage().toString();
+ else
+ return "";
+ }
+
+ private LoggingEvent lastEvent;
+ };
+
+}
\ No newline at end of file
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketAppenderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketServerTestCase.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketServerTestCase.java?rev=1345492&view=auto
==============================================================================
--- logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketServerTestCase.java (added)
+++ logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketServerTestCase.java Sat Jun 2 11:40:31 2012
@@ -0,0 +1,408 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.log4j.net;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import junit.framework.Test;
+
+import org.apache.log4j.*;
+import org.apache.log4j.util.*;
+
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.NDC;
+import org.apache.log4j.xml.XLevel;
+
+/**
+ @author Ceki Gülcü
+*/
+public class SocketServerTestCase extends TestCase {
+
+ static String TEMP = "output/temp";
+ static String FILTERED = "output/filtered";
+
+ // %5p %x [%t] %c %m%n
+ // DEBUG T1 [main] org.apache.log4j.net.SocketAppenderTestCase Message 1
+ static String PAT1 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) T1 \\[main]\\ "
+ + ".* Message \\d{1,2}";
+
+ // DEBUG T2 [main] ? (?:?) Message 1
+ static String PAT2 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) T2 \\[main]\\ "
+ + "\\? \\(\\?:\\?\\) Message \\d{1,2}";
+
+
+ // DEBUG T3 [main] org.apache.log4j.net.SocketServerTestCase (SocketServerTestCase.java:121) Message 1
+ static String PAT3 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) T3 \\[main]\\ "
+ + "org.apache.log4j.net.SocketServerTestCase "
+ + "\\(SocketServerTestCase.java:\\d{3}\\) Message \\d{1,2}";
+
+
+ // DEBUG some T4 MDC-TEST4 [main] SocketAppenderTestCase - Message 1
+ // DEBUG some T4 MDC-TEST4 [main] SocketAppenderTestCase - Message 1
+ static String PAT4 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some T4 MDC-TEST4 \\[main]\\"
+ + " (root|SocketServerTestCase) - Message \\d{1,2}";
+
+ static String PAT5 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some5 T5 MDC-TEST5 \\[main]\\"
+ + " (root|SocketServerTestCase) - Message \\d{1,2}";
+
+ static String PAT6 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some6 T6 client-test6 MDC-TEST6"
+ + " \\[main]\\ (root|SocketServerTestCase) - Message \\d{1,2}";
+
+ static String PAT7 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some7 T7 client-test7 MDC-TEST7"
+ + " \\[main]\\ (root|SocketServerTestCase) - Message \\d{1,2}";
+
+ // DEBUG some8 T8 shortSocketServer MDC-TEST7 [main] SocketServerTestCase - Message 1
+ static String PAT8 = "^(TRACE|DEBUG| INFO| WARN|ERROR|FATAL|LETHAL) some8 T8 shortSocketServer"
+ + " MDC-TEST8 \\[main]\\ (root|SocketServerTestCase) - Message \\d{1,2}";
+
+
+
+ static String EXCEPTION1 = "java.lang.Exception: Just testing";
+ static String EXCEPTION2 = "\\s*at .*\\(.*\\)";
+ static String EXCEPTION3 = "\\s*at .*\\(Native Method\\)";
+ static String EXCEPTION4 = "\\s*at .*\\(.*Compiled Code\\)";
+ static String EXCEPTION5 = "\\s*at .*\\(.*libgcj.*\\)";
+
+
+ static Logger logger = Logger.getLogger(SocketServerTestCase.class);
+ static public final int PORT = 12345;
+ static Logger rootLogger = Logger.getRootLogger();
+ SocketAppender socketAppender;
+
+ public SocketServerTestCase(String name) {
+ super(name);
+ }
+
+ public void setUp() {
+ System.out.println("Setting up test case.");
+ }
+
+ public void tearDown() {
+ System.out.println("Tearing down test case.");
+ socketAppender = null;
+ rootLogger.removeAllAppenders();
+ }
+
+ /**
+ * The pattern on the server side: %5p %x [%t] %c %m%n
+ *
+ * We are testing NDC functionality across the wire.
+ */
+ public void test1() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ rootLogger.addAppender(socketAppender);
+ common("T1", "key1", "MDC-TEST1");
+ delay(1);
+ ControlFilter cf = new ControlFilter(new String[]{PAT1, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+
+ assertTrue(Compare.compare(FILTERED, "witness/socketServer.1"));
+ }
+
+ /**
+ * The pattern on the server side: %5p %x [%t] %C (%F:%L) %m%n
+ *
+ * We are testing NDC across the wire. Localization is turned off by
+ * default so it is not tested here even if the conversion pattern
+ * uses localization. */
+ public void test2() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ rootLogger.addAppender(socketAppender);
+
+ common("T2", "key2", "MDC-TEST2");
+ delay(1);
+ ControlFilter cf = new ControlFilter(new String[]{PAT2, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+
+ assertTrue(Compare.compare(FILTERED, "target/test-classes/witness/socketServer.2"));
+ }
+
+ /**
+ * The pattern on the server side: %5p %x [%t] %C (%F:%L) %m%n
+ * meaning that we are testing NDC and locatization functionality
+ * across the wire. */
+ public void test3() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ socketAppender.setLocationInfo(true);
+ rootLogger.addAppender(socketAppender);
+
+ common("T3", "key3", "MDC-TEST3");
+ delay(1);
+ ControlFilter cf = new ControlFilter(new String[]{PAT3, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+
+ assertTrue(Compare.compare(FILTERED, "target/test-classes/witness/socketServer.3"));
+ }
+
+ /**
+ * The pattern on the server side: %5p %x %X{key1}%X{key4} [%t] %c{1} - %m%n
+ * meaning that we are testing NDC, MDC and localization functionality across
+ * the wire.
+ */
+ public void test4() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ socketAppender.setLocationInfo(true);
+ rootLogger.addAppender(socketAppender);
+
+ NDC.push("some");
+ common("T4", "key4", "MDC-TEST4");
+ NDC.pop();
+ delay(1);
+ //
+ // These tests check MDC operation which
+ // requires JDK 1.2 or later
+ if(!System.getProperty("java.version").startsWith("1.1.")) {
+
+ ControlFilter cf = new ControlFilter(new String[]{PAT4, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+
+ assertTrue(Compare.compare(FILTERED, "target/test-classes/witness/socketServer.4"));
+ }
+ }
+
+ /**
+ * The pattern on the server side: %5p %x %X{key1}%X{key5} [%t] %c{1} - %m%n
+ *
+ * The test case uses wraps an AsyncAppender around the
+ * SocketAppender. This tests was written specifically for bug
+ * report #9155.
+
+ * Prior to the bug fix the output on the server did not contain the
+ * MDC-TEST5 string because the MDC clone operation (in getMDCCopy
+ * method) operation is performed twice, once from the main thread
+ * which is correct, and a second time from the AsyncAppender's
+ * dispatch thread which is incrorrect.
+
+ */
+ public void test5() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ socketAppender.setLocationInfo(true);
+ AsyncAppender asyncAppender = new AsyncAppender();
+ asyncAppender.setLocationInfo(true);
+ asyncAppender.addAppender(socketAppender);
+ rootLogger.addAppender(asyncAppender);
+
+ NDC.push("some5");
+ common("T5", "key5", "MDC-TEST5");
+ NDC.pop();
+ delay(2);
+ //
+ // These tests check MDC operation which
+ // requires JDK 1.2 or later
+ if(!System.getProperty("java.version").startsWith("1.1.")) {
+ ControlFilter cf = new ControlFilter(new String[]{PAT5, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+
+ assertTrue(Compare.compare(FILTERED, "target/test-classes/witness/socketServer.5"));
+ }
+ }
+
+ /**
+ * The pattern on the server side: %5p %x %X{hostID}${key6} [%t] %c{1} - %m%n
+ *
+ * This test checks whether client-side MDC overrides the server side.
+ * It uses an AsyncAppender encapsulating a SocketAppender
+ */
+ public void test6() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ socketAppender.setLocationInfo(true);
+ AsyncAppender asyncAppender = new AsyncAppender();
+ asyncAppender.setLocationInfo(true);
+ asyncAppender.addAppender(socketAppender);
+ rootLogger.addAppender(asyncAppender);
+
+ NDC.push("some6");
+ MDC.put("hostID", "client-test6");
+ common("T6", "key6", "MDC-TEST6");
+ NDC.pop();
+ MDC.remove("hostID");
+ delay(2);
+ //
+ // These tests check MDC operation which
+ // requires JDK 1.2 or later
+ if(!System.getProperty("java.version").startsWith("1.1.")) {
+ ControlFilter cf = new ControlFilter(new String[]{PAT6, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+
+ assertTrue(Compare.compare(FILTERED, "target/test-classes/witness/socketServer.6"));
+ }
+ }
+
+ /**
+ * The pattern on the server side: %5p %x %X{hostID}${key7} [%t] %c{1} - %m%n
+ *
+ * This test checks whether client-side MDC overrides the server side.
+ */
+ public void test7() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ socketAppender.setLocationInfo(true);
+ rootLogger.addAppender(socketAppender);
+
+ NDC.push("some7");
+ MDC.put("hostID", "client-test7");
+ common("T7", "key7", "MDC-TEST7");
+ NDC.pop();
+ MDC.remove("hostID");
+ delay(2);
+ //
+ // These tests check MDC operation which
+ // requires JDK 1.2 or later
+ if(!System.getProperty("java.version").startsWith("1.1.")) {
+ ControlFilter cf = new ControlFilter(new String[]{PAT7, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+ assertTrue(Compare.compare(FILTERED, "target/test-classes/witness/socketServer.7"));
+ }
+ }
+
+ /**
+ * The pattern on the server side: %5p %x %X{hostID} ${key8} [%t] %c{1} - %m%n
+ *
+ * This test checks whether server side MDC works.
+ */
+ public void test8() throws Exception {
+ socketAppender = new SocketAppender("localhost", PORT);
+ socketAppender.setLocationInfo(true);
+ rootLogger.addAppender(socketAppender);
+
+ NDC.push("some8");
+
+ //
+ // The test has relied on the receiving code to
+ // combine the sent MDC with the receivers MDC
+ // (which contains a value for hostID).
+ // The mechanism of how that happens is not clear
+ // and it does not work with Apache Harmony.
+ // Unclear if it is a Harmony issue.
+ if (System.getProperty("java.vendor").indexOf("Apache") != -1) {
+ MDC.put("hostID", "shortSocketServer");
+ }
+
+ common("T8", "key8", "MDC-TEST8");
+ NDC.pop();
+ delay(2);
+ //
+ // These tests check MDC operation which
+ // requires JDK 1.2 or later
+ if(!System.getProperty("java.version").startsWith("1.1.")) {
+ ControlFilter cf = new ControlFilter(new String[]{PAT8, EXCEPTION1,
+ EXCEPTION2, EXCEPTION3, EXCEPTION4, EXCEPTION5});
+
+ Transformer.transform(
+ TEMP, FILTERED,
+ new Filter[] { cf, new LineNumberFilter(),
+ new JunitTestRunnerFilter(),
+ new SunReflectFilter() });
+ assertTrue(Compare.compare(FILTERED, "target/test-classes/witness/socketServer.8"));
+ }
+ }
+
+ static
+ void common(String dc, String key, Object o) {
+ String oldThreadName = Thread.currentThread().getName();
+ Thread.currentThread().setName("main");
+
+ int i = -1;
+ NDC.push(dc);
+ MDC.put(key, o);
+ Logger root = Logger.getRootLogger();
+
+ logger.setLevel(Level.DEBUG);
+ rootLogger.setLevel(Level.DEBUG);
+
+ logger.log(XLevel.TRACE, "Message " + ++i);
+
+ logger.setLevel(Level.TRACE);
+ rootLogger.setLevel(Level.TRACE);
+
+ logger.trace("Message " + ++i);
+ root.trace("Message " + ++i);
+ logger.debug("Message " + ++i);
+ root.debug("Message " + ++i);
+ logger.info("Message " + ++i);
+ logger.warn("Message " + ++i);
+ logger.log(XLevel.LETHAL, "Message " + ++i); //5
+
+ Exception e = new Exception("Just testing");
+ logger.debug("Message " + ++i, e);
+ root.error("Message " + ++i, e);
+ NDC.pop();
+ MDC.remove(key);
+
+ Thread.currentThread().setName(oldThreadName);
+ }
+
+ public void delay(int secs) {
+ try {Thread.sleep(secs*1000);} catch(Exception e) {}
+ }
+
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTest(new SocketServerTestCase("test1"));
+ suite.addTest(new SocketServerTestCase("test2"));
+ suite.addTest(new SocketServerTestCase("test3"));
+ suite.addTest(new SocketServerTestCase("test4"));
+ suite.addTest(new SocketServerTestCase("test5"));
+ suite.addTest(new SocketServerTestCase("test6"));
+ suite.addTest(new SocketServerTestCase("test7"));
+ suite.addTest(new SocketServerTestCase("test8"));
+ return suite;
+ }
+}
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SocketServerTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SyslogAppenderTest.java (from r1345481, logging/log4j/branches/log4j12modules/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SyslogAppenderTest.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SyslogAppenderTest.java&p1=logging/log4j/branches/log4j12modules/tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/SyslogAppenderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/TelnetAppenderTest.java (from r1345481, logging/log4j/branches/log4j12modules/tests/src/java/org/apache/log4j/net/TelnetAppenderTest.java)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/TelnetAppenderTest.java?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/TelnetAppenderTest.java&p1=logging/log4j/branches/log4j12modules/tests/src/java/org/apache/log4j/net/TelnetAppenderTest.java&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/java/org/apache/log4j/net/TelnetAppenderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer1.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer1.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer1.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer1.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer1.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer1.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer1.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer2.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer2.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer2.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer2.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer2.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer2.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer2.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer3.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer3.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer3.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer3.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer3.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer3.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer3.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer4.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer4.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer4.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer4.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer4.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer4.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer4.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer5.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer5.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer5.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer5.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer5.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer5.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer5.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer6.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer6.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer6.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer6.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer6.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer6.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer6.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer7.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer7.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer7.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer7.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer7.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer7.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer7.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer8.properties (from r1345481, logging/log4j/branches/log4j12modules/tests/input/socketServer8.properties)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer8.properties?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer8.properties&p1=logging/log4j/branches/log4j12modules/tests/input/socketServer8.properties&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer8.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/socketServer8.properties
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/SocketAppenderTestConfig.xml (from r1345481, logging/log4j/branches/log4j12modules/tests/input/xml/SocketAppenderTestConfig.xml)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/SocketAppenderTestConfig.xml?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/SocketAppenderTestConfig.xml&p1=logging/log4j/branches/log4j12modules/tests/input/xml/SocketAppenderTestConfig.xml&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/SocketAppenderTestConfig.xml
------------------------------------------------------------------------------
svn:eol-style = native
Copied: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/smtpAppender1.xml (from r1345481, logging/log4j/branches/log4j12modules/tests/input/xml/smtpAppender1.xml)
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/smtpAppender1.xml?p2=logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/smtpAppender1.xml&p1=logging/log4j/branches/log4j12modules/tests/input/xml/smtpAppender1.xml&r1=1345481&r2=1345492&rev=1345492&view=diff
==============================================================================
(empty)
Propchange: logging/log4j/branches/log4j12modules/modules/net/src/test/resources/input/xml/smtpAppender1.xml
------------------------------------------------------------------------------
svn:eol-style = native