From 4c1a5f76570115e0dcc41c74c07c7d99546a8029 Mon Sep 17 00:00:00 2001 From: Miguel Ferreira Date: Fri, 28 Aug 2015 11:18:44 +0200 Subject: [PATCH] Putting CglibThrowableRenderer.java back after it was removed in 83fd8f6 Also removing the entry 'log/' from .gitignore since that was the culprit for the removal of the file. --- .gitignore | 1 - .../utils/log/CglibThrowableRenderer.java | 84 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 utils/src/main/java/com/cloud/utils/log/CglibThrowableRenderer.java diff --git a/.gitignore b/.gitignore index b9dafcf47b9..58eafaf68d0 100644 --- a/.gitignore +++ b/.gitignore @@ -85,7 +85,6 @@ configure-stamp *_flymake.js engine/storage/integration-test/test-output tools/apidoc/log/ -log/ plugins/network-elements/juniper-contrail/logs/ scripts/vm/hypervisor/xenserver/vhd-util *.orig diff --git a/utils/src/main/java/com/cloud/utils/log/CglibThrowableRenderer.java b/utils/src/main/java/com/cloud/utils/log/CglibThrowableRenderer.java new file mode 100644 index 00000000000..b102dc44a2c --- /dev/null +++ b/utils/src/main/java/com/cloud/utils/log/CglibThrowableRenderer.java @@ -0,0 +1,84 @@ +// +// 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 com.cloud.utils.log; + +import java.io.PrintWriter; +import java.util.ArrayList; + +import org.apache.log4j.spi.ThrowableRenderer; + +/** + * This renderer removes all the Cglib generated methods from the call + * + * Unfortunately, I had to copy out the EnhancedThrowableRenderer from + * the apach libraries because EnhancedThrowableRenderer is a final class. + * simply override doRender. Not sure what the developers are thinking there + * making it final. + * + * + * into log4j.xml. + * + */ +public class CglibThrowableRenderer implements ThrowableRenderer { + /** + * Construct new instance. + */ + public CglibThrowableRenderer() { + super(); + } + + @Override + public String[] doRender(final Throwable th) { + try { + ArrayList lines = new ArrayList(); + Throwable throwable = th; + lines.add(throwable.toString()); + int start = 0; + do { + StackTraceElement[] elements = throwable.getStackTrace(); + for (int i = 0; i < elements.length - start; i++) { + StackTraceElement element = elements[i]; + String filename = element.getFileName(); + String method = element.getMethodName(); + if ((filename != null && filename.equals("")) || (method != null && method.equals("invokeSuper"))) { + continue; + } + lines.add("\tat " + element.toString()); + } + if (start != 0) { + lines.add("\t... " + start + " more"); + } + throwable = throwable.getCause(); + if (throwable != null) { + lines.add("Caused by: " + throwable.toString()); + start = elements.length - 1; + } + } while (throwable != null); + return lines.toArray(new String[lines.size()]); + } catch (Exception ex) { + PrintWriter pw = new PrintWriter(System.err); + ex.printStackTrace(pw); + pw = new PrintWriter(System.out); + ex.printStackTrace(pw); + ex.printStackTrace(); + return null; + } + } +}