001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the license for the specific language governing permissions and
015 * limitations under the license.
016 */
017package org.apache.log4j.or;
018
019import org.apache.log4j.Layout;
020
021/**
022 */
023public class ThreadGroupRenderer implements ObjectRenderer {
024
025    @Override
026    public
027    String  doRender(Object obj) {
028        if(obj instanceof ThreadGroup) {
029            StringBuilder sb = new StringBuilder();
030            ThreadGroup threadGroup = (ThreadGroup) obj;
031            sb.append("java.lang.ThreadGroup[name=");
032            sb.append(threadGroup.getName());
033            sb.append(", maxpri=");
034            sb.append(threadGroup.getMaxPriority());
035            sb.append("]");
036            Thread[] threads = new Thread[threadGroup.activeCount()];
037            threadGroup.enumerate(threads);
038            for (Thread thread : threads) {
039                sb.append(Layout.LINE_SEP);
040                sb.append("   Thread=[");
041                sb.append(thread.getName());
042                sb.append(",");
043                sb.append(thread.getPriority());
044                sb.append(",");
045                sb.append(thread.isDaemon());
046                sb.append("]");
047            }
048            return sb.toString();
049        }
050        try {
051            // this is the best we can do
052            return obj.toString();
053        } catch(Exception ex) {
054            return ex.toString();
055        }
056    }
057}