mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
remove the logger.api dependency, use repackaged logger. #985
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
#arthas.config.overrideAll=true
|
||||
#arthas.telnetPort=9998
|
||||
#arthas.httpPort=9999
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.advisor;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.GlobalOptions;
|
||||
import com.taobao.arthas.core.util.matcher.Matcher;
|
||||
import com.taobao.arthas.core.util.*;
|
||||
@@ -7,7 +9,6 @@ import com.taobao.arthas.core.util.affect.EnhancerAffect;
|
||||
import com.taobao.arthas.core.util.collection.GaStack;
|
||||
import com.taobao.arthas.core.util.collection.ThreadUnsafeFixGaStack;
|
||||
import com.taobao.arthas.core.util.collection.ThreadUnsafeGaStack;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import org.objectweb.asm.*;
|
||||
import org.objectweb.asm.commons.AdviceAdapter;
|
||||
import org.objectweb.asm.commons.JSRInlinerAdapter;
|
||||
@@ -28,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
*/
|
||||
public class AdviceWeaver extends ClassVisitor implements Opcodes {
|
||||
|
||||
private final static Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(AdviceWeaver.class);
|
||||
|
||||
public static final String ON_BEFORE = "methodOnBegin";
|
||||
public static final String ON_RETURN = "methodOnReturnEnd";
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.taobao.arthas.core.advisor;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.GlobalOptions;
|
||||
import com.taobao.arthas.core.util.Constants;
|
||||
import com.taobao.arthas.core.util.FileUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.matcher.Matcher;
|
||||
import com.taobao.arthas.core.util.SearchUtils;
|
||||
import com.taobao.arthas.core.util.affect.EnhancerAffect;
|
||||
|
||||
import com.taobao.arthas.core.util.reflect.FieldUtils;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
|
||||
@@ -35,7 +35,7 @@ import static org.objectweb.asm.ClassWriter.COMPUTE_MAXS;
|
||||
*/
|
||||
public class Enhancer implements ClassFileTransformer {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(Enhancer.class);
|
||||
|
||||
private final int adviceId;
|
||||
private final boolean isTracing;
|
||||
|
||||
@@ -5,23 +5,23 @@ import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.FileUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
@Name("cat")
|
||||
@Summary("Concatenate and print files")
|
||||
public class CatCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(CatCommand.class);
|
||||
private List<String> files;
|
||||
private String encoding;
|
||||
|
||||
@@ -65,7 +65,7 @@ public class CatCommand extends AnnotatedCommand {
|
||||
encoding == null ? Charset.defaultCharset() : Charset.forName(encoding));
|
||||
process.write(fileToString);
|
||||
} catch (IOException e) {
|
||||
logger.error(null, "cat read file error. name: " + file, e);
|
||||
logger.error("cat read file error. name: " + file, e);
|
||||
process.write("cat read file error: " + e.getMessage() + '\n');
|
||||
process.end(1);
|
||||
return;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.taobao.arthas.core.command.basic1000;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.common.IOUtils;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.shell.term.impl.Helper;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.TableElement;
|
||||
import com.taobao.text.util.RenderUtil;
|
||||
@@ -31,7 +31,7 @@ import java.io.InputStreamReader;
|
||||
@Summary("Display all the available keymap for the specified connection.")
|
||||
@Description(Constants.WIKI + Constants.WIKI_HOME + "keymap")
|
||||
public class KeymapCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(KeymapCommand.class);
|
||||
|
||||
@Override
|
||||
public void process(CommandProcess process) {
|
||||
@@ -59,7 +59,7 @@ public class KeymapCommand extends AnnotatedCommand {
|
||||
}
|
||||
process.write(RenderUtil.render(table, process.width()));
|
||||
} catch (IOException e) {
|
||||
logger.error("keymap", "read inputrc file error.", e);
|
||||
logger.error("read inputrc file error.", e);
|
||||
} finally {
|
||||
IOUtils.close(inputrc);
|
||||
process.end();
|
||||
|
||||
@@ -7,20 +7,21 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.sun.management.HotSpotDiagnosticMXBean;
|
||||
import com.sun.management.VMOption;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.command.express.OgnlExpress;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.TableElement;
|
||||
import com.taobao.text.util.RenderUtil;
|
||||
@@ -36,7 +37,7 @@ import com.taobao.text.util.RenderUtil;
|
||||
@Description("\nExamples:\n" + " vmoption\n" + " vmoption PrintGCDetails\n" + " vmoption PrintGCDetails true\n"
|
||||
+ Constants.WIKI + Constants.WIKI_HOME + "vmoption")
|
||||
public class VMOptionCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(VMOptionCommand.class);
|
||||
|
||||
private String name;
|
||||
private String value;
|
||||
@@ -82,7 +83,7 @@ public class VMOptionCommand extends AnnotatedCommand {
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
process.write("Error during setting vm option: " + t.getMessage() + "\n");
|
||||
logger.error("arthas", "Error during setting vm option", t);
|
||||
logger.error("Error during setting vm option", t);
|
||||
} finally {
|
||||
process.end();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.taobao.arthas.core.command.express;
|
||||
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
|
||||
import ognl.ClassResolver;
|
||||
import ognl.DefaultMemberAccess;
|
||||
@@ -15,7 +15,7 @@ import ognl.OgnlContext;
|
||||
*/
|
||||
public class OgnlExpress implements Express {
|
||||
private static final MemberAccess MEMBER_ACCESS = new DefaultMemberAccess(true);
|
||||
Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(OgnlExpress.class);
|
||||
|
||||
private Object bindObject;
|
||||
private final OgnlContext context;
|
||||
@@ -36,7 +36,7 @@ public class OgnlExpress implements Express {
|
||||
try {
|
||||
return Ognl.getValue(express, context, bindObject);
|
||||
} catch (Exception e) {
|
||||
logger.error(null, "Error during evaluating the expression:", e);
|
||||
logger.error("Error during evaluating the expression:", e);
|
||||
throw new ExpressException(express, e);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,8 +1,9 @@
|
||||
package com.taobao.arthas.core.command.klass100;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.util.FileUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -18,7 +19,7 @@ import java.util.Set;
|
||||
*/
|
||||
class ClassDumpTransformer implements ClassFileTransformer {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(ClassDumpTransformer.class);
|
||||
|
||||
private Set<Class<?>> classesToEnhance;
|
||||
private Map<Class<?>, File> dumpResult;
|
||||
@@ -33,7 +34,7 @@ class ClassDumpTransformer implements ClassFileTransformer {
|
||||
public ClassDumpTransformer(Set<Class<?>> classesToEnhance, File directory) {
|
||||
this.classesToEnhance = classesToEnhance;
|
||||
this.dumpResult = new HashMap<Class<?>, File>();
|
||||
this.arthasLogHome = new File(LogUtil.LOGS_ARTHAS_DIR);
|
||||
this.arthasLogHome = new File(LogUtil.loggingDir());
|
||||
this.directory = directory;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.taobao.arthas.core.command.klass100;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.Enhancer;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.SearchUtils;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.arthas.core.util.TypeRenderUtils;
|
||||
@@ -17,7 +18,6 @@ import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Color;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.LabelElement;
|
||||
@@ -45,7 +45,7 @@ import static com.taobao.text.ui.Element.label;
|
||||
" dump -E org\\\\.apache\\\\.commons\\\\.lang\\\\.StringUtils\n" +
|
||||
Constants.WIKI + Constants.WIKI_HOME + "dump")
|
||||
public class DumpClassCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(DumpClassCommand.class);
|
||||
|
||||
private String classPattern;
|
||||
private String code = null;
|
||||
@@ -141,7 +141,7 @@ public class DumpClassCommand extends AnnotatedCommand {
|
||||
.write(com.taobao.arthas.core.util.Constants.EMPTY_STRING);
|
||||
effect.rCnt(classFiles.keySet().size());
|
||||
} catch (Throwable t) {
|
||||
logger.error(null, "dump: fail to dump classes: " + matchedClasses, t);
|
||||
logger.error("dump: fail to dump classes: " + matchedClasses, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package com.taobao.arthas.core.command.klass100;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.command.express.ExpressException;
|
||||
import com.taobao.arthas.core.command.express.ExpressFactory;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.SearchUtils;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.arthas.core.util.TypeRenderUtils;
|
||||
@@ -19,7 +20,6 @@ import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Color;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.Element;
|
||||
@@ -46,7 +46,7 @@ import static com.taobao.text.ui.Element.label;
|
||||
Constants.WIKI + Constants.WIKI_HOME + "getstatic")
|
||||
public class GetStaticCommand extends AnnotatedCommand {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(GetStaticCommand.class);
|
||||
|
||||
private String classPattern;
|
||||
private String fieldPattern;
|
||||
@@ -138,13 +138,11 @@ public class GetStaticCommand extends AnnotatedCommand {
|
||||
|
||||
affect.rCnt(1);
|
||||
} catch (IllegalAccessException e) {
|
||||
logger.warn("getstatic: failed to get static value, class: " + clazz + ", field: " + field.getName(),
|
||||
e);
|
||||
logger.warn("getstatic: failed to get static value, class: {}, field: {} ", clazz, field.getName(), e);
|
||||
process.write("Failed to get static, exception message: " + e.getMessage()
|
||||
+ ", please check $HOME/logs/arthas/arthas.log for more details. \n");
|
||||
} catch (ExpressException e) {
|
||||
logger.warn("getstatic: failed to get express value, class: " + clazz + ", field: " + field.getName()
|
||||
+ ", express: " + express, e);
|
||||
logger.warn("getstatic: failed to get express value, class: {}, field: {}, express: {}", clazz, field.getName(), express, e);
|
||||
process.write("Failed to get static, exception message: " + e.getMessage()
|
||||
+ ", please check $HOME/logs/arthas/arthas.log for more details. \n");
|
||||
} finally {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.command.klass100;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
@@ -7,7 +9,6 @@ import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.ClassUtils;
|
||||
import com.taobao.arthas.core.util.Decompiler;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.SearchUtils;
|
||||
import com.taobao.arthas.core.util.TypeRenderUtils;
|
||||
import com.taobao.arthas.core.util.affect.RowAffect;
|
||||
@@ -16,7 +17,6 @@ import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Color;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.lang.LangRenderUtil;
|
||||
@@ -49,7 +49,7 @@ import static com.taobao.text.ui.Element.label;
|
||||
" jad -c 39eb305e -E org\\\\.apache\\\\.*\\\\.StringUtils\n" +
|
||||
Constants.WIKI + Constants.WIKI_HOME + "jad")
|
||||
public class JadCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(JadCommand.class);
|
||||
private static Pattern pattern = Pattern.compile("(?m)^/\\*\\s*\\*/\\s*$" + System.getProperty("line.separator"));
|
||||
|
||||
private String classPattern;
|
||||
@@ -133,7 +133,7 @@ public class JadCommand extends AnnotatedCommand {
|
||||
if(ClassUtils.isLambdaClass(clazz) && e instanceof VerifyError) {
|
||||
errorMsg += ", Please ignore lambda class VerifyError: https://github.com/alibaba/arthas/issues/675";
|
||||
}
|
||||
logger.error("jad", errorMsg, e);
|
||||
logger.error(errorMsg, e);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
@@ -176,7 +176,7 @@ public class JadCommand extends AnnotatedCommand {
|
||||
process.write(com.taobao.arthas.core.util.Constants.EMPTY_STRING);
|
||||
affect.rCnt(classFiles.keySet().size());
|
||||
} catch (Throwable t) {
|
||||
logger.error(null, "jad: fail to decompile class: " + c.getName(), t);
|
||||
logger.error("jad: fail to decompile class: " + c.getName(), t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -7,6 +7,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.compiler.DynamicCompiler;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
@@ -15,14 +17,12 @@ import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.ClassLoaderUtils;
|
||||
import com.taobao.arthas.core.util.FileUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.affect.RowAffect;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -36,7 +36,7 @@ import com.taobao.middleware.logger.Logger;
|
||||
+ "mc")
|
||||
public class MemoryCompilerCommand extends AnnotatedCommand {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(MemoryCompilerCommand.class);
|
||||
|
||||
private String directory;
|
||||
private String hashCode;
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.taobao.arthas.core.command.klass100;
|
||||
|
||||
import java.lang.instrument.Instrumentation;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.command.express.Express;
|
||||
import com.taobao.arthas.core.command.express.ExpressException;
|
||||
@@ -9,7 +11,6 @@ import com.taobao.arthas.core.command.express.ExpressFactory;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.ClassLoaderUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.arthas.core.view.ObjectView;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
@@ -17,7 +18,6 @@ import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -35,7 +35,7 @@ import com.taobao.middleware.logger.Logger;
|
||||
+ Constants.WIKI + Constants.WIKI_HOME + "ognl\n"
|
||||
+ " https://commons.apache.org/proper/commons-ognl/language-guide.html")
|
||||
public class OgnlCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(OgnlCommand.class);
|
||||
|
||||
private String express;
|
||||
|
||||
|
||||
@@ -10,11 +10,12 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.command.logger.LoggerCommand;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
@@ -38,7 +39,7 @@ import com.taobao.middleware.cli.annotations.Summary;
|
||||
" redefine -c 327a647b /tmp/Test.class /tmp/Test\\$Inner.class \n" +
|
||||
Constants.WIKI + Constants.WIKI_HOME + "redefine")
|
||||
public class RedefineCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(RedefineCommand.class);
|
||||
private static final int MAX_FILE_SIZE = 10 * 1024 * 1024;
|
||||
|
||||
private String hashCode;
|
||||
@@ -118,7 +119,7 @@ public class RedefineCommand extends AnnotatedCommand {
|
||||
continue;
|
||||
}
|
||||
definitions.add(new ClassDefinition(clazz, bytesMap.get(clazz.getName())));
|
||||
logger.info("redefine", "Try redefine class name: {}, ClassLoader: {}", clazz.getName(), clazz.getClassLoader());
|
||||
logger.info("Try redefine class name: {}, ClassLoader: {}", clazz.getName(), clazz.getClassLoader());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,19 +16,19 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.common.IOUtils;
|
||||
import com.taobao.arthas.common.ReflectUtils;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.ClassLoaderUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.TableElement;
|
||||
import com.taobao.text.util.RenderUtil;
|
||||
@@ -50,7 +50,7 @@ import com.taobao.text.util.RenderUtil;
|
||||
+ Constants.WIKI + Constants.WIKI_HOME + "logger")
|
||||
//@formatter:on
|
||||
public class LoggerCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(LoggerCommand.class);
|
||||
|
||||
private static byte[] LoggerHelperBytes;
|
||||
private static byte[] Log4jHelperBytes;
|
||||
@@ -143,7 +143,7 @@ public class LoggerCommand extends AnnotatedCommand {
|
||||
result = true;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "logger command update log4j level error", e);
|
||||
logger.error("logger command update log4j level error", e);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -152,7 +152,7 @@ public class LoggerCommand extends AnnotatedCommand {
|
||||
result = true;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "logger command update logback level error", e);
|
||||
logger.error("logger command update logback level error", e);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -161,7 +161,7 @@ public class LoggerCommand extends AnnotatedCommand {
|
||||
result = true;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "logger command update log4j2 level error", e);
|
||||
logger.error("logger command update log4j2 level error", e);
|
||||
}
|
||||
|
||||
if (result) {
|
||||
@@ -324,7 +324,7 @@ public class LoggerCommand extends AnnotatedCommand {
|
||||
helperClass.getName(), helperClassName);
|
||||
ReflectUtils.defineClass(helperClassName, helperClassBytes, classLoader);
|
||||
} catch (Throwable e1) {
|
||||
logger.error("arthas", "arthas loggger command try to define helper class error: " + helperClassName,
|
||||
logger.error("arthas loggger command try to define helper class error: " + helperClassName,
|
||||
e1);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.command.monitor200;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.Advice;
|
||||
import com.taobao.arthas.core.advisor.ArthasMethod;
|
||||
import com.taobao.arthas.core.advisor.ReflectAdviceListenerAdapter;
|
||||
@@ -11,7 +13,7 @@ import com.taobao.arthas.core.util.ThreadLocalWatch;
|
||||
* @author ralf0131 2017-01-06 16:02.
|
||||
*/
|
||||
public class AbstractTraceAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(AbstractTraceAdviceListener.class);
|
||||
protected final ThreadLocalWatch threadLocalWatch = new ThreadLocalWatch();
|
||||
protected TraceCommand command;
|
||||
protected CommandProcess process;
|
||||
@@ -84,9 +86,9 @@ public class AbstractTraceAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
}
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
LogUtil.getArthasLogger().warn("trace failed.", e);
|
||||
logger.warn("trace failed.", e);
|
||||
process.write("trace failed, condition is: " + command.getConditionExpress() + ", " + e.getMessage()
|
||||
+ ", visit " + LogUtil.LOGGER_FILE + " for more details.\n");
|
||||
+ ", visit " + LogUtil.loggingFile() + " for more details.\n");
|
||||
process.end();
|
||||
} finally {
|
||||
threadBoundEntity.remove();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.command.monitor200;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
@@ -8,7 +10,6 @@ import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.shell.handlers.Handler;
|
||||
import com.taobao.arthas.core.shell.handlers.shell.QExitHandler;
|
||||
import com.taobao.arthas.core.shell.session.Session;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.NetUtils;
|
||||
import com.taobao.arthas.core.util.NetUtils.Response;
|
||||
import com.taobao.arthas.core.util.ThreadUtil;
|
||||
@@ -17,7 +18,6 @@ import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Color;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.Style;
|
||||
@@ -49,7 +49,7 @@ import java.util.TimerTask;
|
||||
Constants.WIKI + Constants.WIKI_HOME + "dashboard")
|
||||
public class DashboardCommand extends AnnotatedCommand {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(DashboardCommand.class);
|
||||
|
||||
private SumRateCounter tomcatRequestCounter = new SumRateCounter();
|
||||
private SumRateCounter tomcatErrorCounter = new SumRateCounter();
|
||||
@@ -303,7 +303,7 @@ public class DashboardCommand extends AnnotatedCommand {
|
||||
addTomcatInfo(tomcatInfoTable);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logger.error(null, "get Tomcat Info error!", t);
|
||||
logger.error("get Tomcat Info error!", t);
|
||||
}
|
||||
|
||||
if (tomcatInfoTable != null) {
|
||||
|
||||
@@ -5,6 +5,8 @@ import java.lang.instrument.UnmodifiableClassException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.AdviceListener;
|
||||
import com.taobao.arthas.core.advisor.Enhancer;
|
||||
import com.taobao.arthas.core.advisor.InvokeTraceable;
|
||||
@@ -19,14 +21,13 @@ import com.taobao.arthas.core.util.Constants;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.affect.EnhancerAffect;
|
||||
import com.taobao.arthas.core.util.matcher.Matcher;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
/**
|
||||
* @author beiwei30 on 29/11/2016.
|
||||
*/
|
||||
public abstract class EnhancerCommand extends AnnotatedCommand {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(EnhancerCommand.class);
|
||||
protected static final List<String> EMPTY = Collections.emptyList();
|
||||
public static final String[] EXPRESS_EXAMPLES = { "params", "returnObj", "throwExp", "target", "clazz", "method",
|
||||
"{params,returnObj}", "params[0]" };
|
||||
@@ -117,7 +118,7 @@ public abstract class EnhancerCommand extends AnnotatedCommand {
|
||||
process.write("No class or method is affected, try:\n"
|
||||
+ "1. sm CLASS_NAME METHOD_NAME to make sure the method you are tracing actually exists (it might be in your parent class).\n"
|
||||
+ "2. reset CLASS_NAME and try again, your method body might be too large.\n"
|
||||
+ "3. check arthas log: " + LogUtil.LOGGER_FILE + "\n"
|
||||
+ "3. check arthas log: " + LogUtil.loggingFile() + "\n"
|
||||
+ "4. visit https://github.com/alibaba/arthas/issues/47 for more details.\n");
|
||||
process.end();
|
||||
return;
|
||||
@@ -134,7 +135,7 @@ public abstract class EnhancerCommand extends AnnotatedCommand {
|
||||
|
||||
process.write(effect + "\n");
|
||||
} catch (UnmodifiableClassException e) {
|
||||
logger.error(null, "error happens when enhancing class", e);
|
||||
logger.error("error happens when enhancing class", e);
|
||||
} finally {
|
||||
if (session.getLock() == lock) {
|
||||
// enhance结束后解锁
|
||||
@@ -148,7 +149,7 @@ public abstract class EnhancerCommand extends AnnotatedCommand {
|
||||
}
|
||||
|
||||
private static void warn(CommandProcess process, String message) {
|
||||
logger.error(null, message);
|
||||
logger.error(message);
|
||||
process.write("cannot operate the current command, pls. check arthas.log\n");
|
||||
if (process.isForeground()) {
|
||||
process.echoTips(Constants.Q_OR_CTRL_C_ABORT_MSG + "\n");
|
||||
|
||||
@@ -6,17 +6,17 @@ import java.lang.management.ManagementFactory;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.sun.management.HotSpotDiagnosticMXBean;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
/**
|
||||
* HeapDump command
|
||||
@@ -29,7 +29,7 @@ import com.taobao.middleware.logger.Logger;
|
||||
@Description("\nExamples:\n" + " heapdump\n" + " heapdump --live\n" + " heapdump --live /tmp/dump.hprof\n"
|
||||
+ Constants.WIKI + Constants.WIKI_HOME + "heapdump")
|
||||
public class HeapDumpCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(HeapDumpCommand.class);
|
||||
private String file;
|
||||
|
||||
private boolean live;
|
||||
@@ -65,7 +65,7 @@ public class HeapDumpCommand extends AnnotatedCommand {
|
||||
process.write("Heap dump file created\n");
|
||||
|
||||
} catch (Throwable t) {
|
||||
logger.error("arthas", "heap dump error", t);
|
||||
logger.error("heap dump error", t);
|
||||
process.write("Heap dump error: " + t.getMessage() + '\n');
|
||||
status = 1;
|
||||
} finally {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.command.monitor200;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.cli.CliToken;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
@@ -10,7 +12,6 @@ import com.taobao.arthas.core.shell.handlers.Handler;
|
||||
import com.taobao.arthas.core.shell.handlers.command.CommandInterruptHandler;
|
||||
import com.taobao.arthas.core.shell.handlers.shell.QExitHandler;
|
||||
import com.taobao.arthas.core.shell.session.Session;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.arthas.core.util.TokenUtils;
|
||||
import com.taobao.arthas.core.util.matcher.Matcher;
|
||||
@@ -21,7 +22,6 @@ import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Color;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.LabelElement;
|
||||
@@ -72,7 +72,7 @@ import static javax.management.MBeanOperationInfo.UNKNOWN;
|
||||
Constants.WIKI + Constants.WIKI_HOME + "mbean")
|
||||
public class MBeanCommand extends AnnotatedCommand {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(MBeanCommand.class);
|
||||
|
||||
private String name;
|
||||
private String attribute;
|
||||
|
||||
+4
-4
@@ -7,17 +7,17 @@ import java.nio.ByteBuffer;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.common.JavaVersionUtils;
|
||||
import com.taobao.arthas.common.PidUtils;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.TableElement;
|
||||
import com.taobao.text.util.RenderUtil;
|
||||
@@ -34,7 +34,7 @@ import sun.management.counter.perf.PerfInstrumentation;
|
||||
@Summary("Display the perf counter infornation.")
|
||||
@Description(Constants.WIKI + Constants.WIKI_HOME + "perf")
|
||||
public class PerfCounterCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(PerfCounterCommand.class);
|
||||
private static Object perfObject;
|
||||
private static Method attachMethod;
|
||||
|
||||
@@ -113,7 +113,7 @@ public class PerfCounterCommand extends AnnotatedCommand {
|
||||
PerfInstrumentation perfInstrumentation = new PerfInstrumentation(buffer);
|
||||
return perfInstrumentation.getAllCounters();
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "get perf counter error", e);
|
||||
logger.error("get perf counter error", e);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.common.OSUtils;
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.cli.CliToken;
|
||||
@@ -18,14 +20,12 @@ import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
import com.taobao.middleware.cli.annotations.DefaultValue;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
import one.profiler.AsyncProfiler;
|
||||
import one.profiler.Counter;
|
||||
@@ -58,7 +58,7 @@ import one.profiler.Counter;
|
||||
+ Constants.WIKI + Constants.WIKI_HOME + "profiler")
|
||||
//@formatter:on
|
||||
public class ProfilerCommand extends AnnotatedCommand {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(ProfilerCommand.class);
|
||||
|
||||
private String action;
|
||||
private String actionArg;
|
||||
@@ -113,7 +113,7 @@ public class ProfilerCommand extends AnnotatedCommand {
|
||||
libPath = soFile.getAbsolutePath();
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "can not find libasyncProfiler so", e);
|
||||
logger.error("can not find libasyncProfiler so", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -332,7 +332,7 @@ public class ProfilerCommand extends AnnotatedCommand {
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
process.write(e.getMessage()).write("\n");
|
||||
logger.error("arthas", "AsyncProfiler error", e);
|
||||
logger.error("AsyncProfiler error", e);
|
||||
status = 1;
|
||||
} finally {
|
||||
process.end(status);
|
||||
|
||||
+4
-3
@@ -2,19 +2,20 @@ package com.taobao.arthas.core.command.monitor200;
|
||||
|
||||
import com.taobao.arthas.core.advisor.ReflectAdviceListenerAdapter;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.Advice;
|
||||
import com.taobao.arthas.core.advisor.ArthasMethod;
|
||||
import com.taobao.arthas.core.util.DateUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.ThreadLocalWatch;
|
||||
import com.taobao.arthas.core.util.ThreadUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
/**
|
||||
* @author beiwei30 on 29/11/2016.
|
||||
*/
|
||||
public class StackAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(StackAdviceListener.class);
|
||||
|
||||
private final ThreadLocal<String> stackThreadLocal = new ThreadLocal<String>();
|
||||
private final ThreadLocalWatch threadLocalWatch = new ThreadLocalWatch();
|
||||
@@ -63,7 +64,7 @@ public class StackAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
} catch (Exception e) {
|
||||
logger.warn("stack failed.", e);
|
||||
process.write("stack failed, condition is: " + command.getConditionExpress() + ", " + e.getMessage()
|
||||
+ ", visit " + LogUtil.LOGGER_FILE + " for more details.\n");
|
||||
+ ", visit " + LogUtil.loggingFile() + " for more details.\n");
|
||||
process.end();
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -3,6 +3,8 @@ package com.taobao.arthas.core.command.monitor200;
|
||||
import com.taobao.arthas.core.advisor.ReflectAdviceListenerAdapter;
|
||||
import com.taobao.arthas.core.command.express.ExpressException;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.Advice;
|
||||
import com.taobao.arthas.core.advisor.ArthasMethod;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
@@ -20,7 +22,7 @@ import static com.taobao.arthas.core.command.monitor200.TimeTunnelTable.fillTabl
|
||||
* @author beiwei30 on 30/11/2016.
|
||||
*/
|
||||
public class TimeTunnelAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(TimeTunnelAdviceListener.class);
|
||||
private TimeTunnelCommand command;
|
||||
private CommandProcess process;
|
||||
|
||||
@@ -61,9 +63,9 @@ public class TimeTunnelAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
try {
|
||||
match = isConditionMet(command.getConditionExpress(), advice, cost);
|
||||
} catch (ExpressException e) {
|
||||
LogUtil.getArthasLogger().warn("tt failed.", e);
|
||||
logger.warn("tt failed.", e);
|
||||
process.write("tt failed, condition is: " + command.getConditionExpress() + ", " + e.getMessage()
|
||||
+ ", visit " + LogUtil.LOGGER_FILE + " for more details.\n");
|
||||
+ ", visit " + LogUtil.loggingFile() + " for more details.\n");
|
||||
process.end();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.command.monitor200;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.Advice;
|
||||
import com.taobao.arthas.core.advisor.AdviceListener;
|
||||
import com.taobao.arthas.core.advisor.ArthasMethod;
|
||||
@@ -20,7 +22,6 @@ import com.taobao.middleware.cli.annotations.Name;
|
||||
import com.taobao.middleware.cli.annotations.Option;
|
||||
import com.taobao.middleware.cli.annotations.Summary;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.ui.TableElement;
|
||||
import com.taobao.text.util.RenderUtil;
|
||||
|
||||
@@ -79,7 +80,7 @@ public class TimeTunnelCommand extends EnhancerCommand {
|
||||
private int numberOfLimit = 100;
|
||||
private int replayTimes = 1;
|
||||
private long replayInterval = 1000L;
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(TimeTunnelCommand.class);
|
||||
|
||||
@Argument(index = 0, argName = "class-pattern", required = false)
|
||||
@Description("Path and classname of Pattern Matching")
|
||||
@@ -365,7 +366,7 @@ public class TimeTunnelCommand extends EnhancerCommand {
|
||||
affect.rCnt(1);
|
||||
} catch (ExpressException e) {
|
||||
logger.warn("tt failed.", e);
|
||||
process.write(e.getMessage() + ", visit " + LogUtil.LOGGER_FILE + " for more detail\n");
|
||||
process.write(e.getMessage() + ", visit " + LogUtil.loggingFile() + " for more detail\n");
|
||||
} finally {
|
||||
process.write(affect.toString()).write("\n");
|
||||
process.end();
|
||||
@@ -402,8 +403,8 @@ public class TimeTunnelCommand extends EnhancerCommand {
|
||||
|
||||
affect.rCnt(matchingTimeSegmentMap.size());
|
||||
} catch (ExpressException e) {
|
||||
LogUtil.getArthasLogger().warn("tt failed.", e);
|
||||
process.write(e.getMessage() + ", visit " + LogUtil.LOGGER_FILE + " for more detail\n");
|
||||
logger.warn("tt failed.", e);
|
||||
process.write(e.getMessage() + ", visit " + LogUtil.loggingFile() + " for more detail\n");
|
||||
} finally {
|
||||
process.write(affect.toString()).write("\n");
|
||||
process.end();
|
||||
|
||||
+4
-3
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.command.monitor200;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.Advice;
|
||||
import com.taobao.arthas.core.advisor.ArthasMethod;
|
||||
import com.taobao.arthas.core.advisor.ReflectAdviceListenerAdapter;
|
||||
@@ -9,14 +11,13 @@ import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.arthas.core.util.ThreadLocalWatch;
|
||||
import com.taobao.arthas.core.view.ObjectView;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
/**
|
||||
* @author beiwei30 on 29/11/2016.
|
||||
*/
|
||||
class WatchAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(WatchAdviceListener.class);
|
||||
private final ThreadLocalWatch threadLocalWatch = new ThreadLocalWatch();
|
||||
private WatchCommand command;
|
||||
private CommandProcess process;
|
||||
@@ -91,7 +92,7 @@ class WatchAdviceListener extends ReflectAdviceListenerAdapter {
|
||||
} catch (Exception e) {
|
||||
logger.warn("watch failed.", e);
|
||||
process.write("watch failed, condition is: " + command.getConditionExpress() + ", express is: "
|
||||
+ command.getExpress() + ", " + e.getMessage() + ", visit " + LogUtil.LOGGER_FILE
|
||||
+ command.getExpress() + ", " + e.getMessage() + ", visit " + LogUtil.loggingFile()
|
||||
+ " for more details.\n");
|
||||
process.end();
|
||||
}
|
||||
|
||||
@@ -19,7 +19,11 @@ import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import com.alibaba.arthas.deps.ch.qos.logback.classic.LoggerContext;
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.alibaba.arthas.tunnel.client.TunnelClient;
|
||||
import com.taobao.arthas.common.AnsiLog;
|
||||
import com.taobao.arthas.common.PidUtils;
|
||||
import com.taobao.arthas.core.advisor.AdviceWeaver;
|
||||
import com.taobao.arthas.core.command.BuiltinCommandPack;
|
||||
@@ -42,7 +46,6 @@ import com.taobao.arthas.core.util.Constants;
|
||||
import com.taobao.arthas.core.util.FileUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.UserStatUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
import io.netty.channel.ChannelFuture;
|
||||
|
||||
@@ -51,15 +54,17 @@ import io.netty.channel.ChannelFuture;
|
||||
* @author vlinux on 15/5/2.
|
||||
*/
|
||||
public class ArthasBootstrap {
|
||||
public static final String ARTHAS_HOME_PROPERTY = "arthas.home";
|
||||
private static String ARTHAS_SHOME = null;
|
||||
|
||||
public static final String CONFIG_NAME_PROPERTY = "arthas.config.name";
|
||||
public static final String CONFIG_LOCATION_PROPERTY = "arthas.config.location";
|
||||
public static final String CONFIG_OVERRIDE_ALL= "arthas.config.overrideAll";
|
||||
|
||||
private static Logger logger = LogUtil.getArthasLogger();
|
||||
private static ArthasBootstrap arthasBootstrap;
|
||||
|
||||
private ArthasEnvironment arthasEnvironment;
|
||||
private Configure configure;
|
||||
|
||||
private AtomicBoolean isBindRef = new AtomicBoolean(false);
|
||||
private Instrumentation instrumentation;
|
||||
@@ -70,13 +75,25 @@ public class ArthasBootstrap {
|
||||
|
||||
private File arthasOutputDir;
|
||||
|
||||
private ArthasBootstrap(Instrumentation instrumentation) {
|
||||
private static LoggerContext loggerContext;
|
||||
|
||||
private ArthasBootstrap(Instrumentation instrumentation, String args) throws Throwable {
|
||||
this.instrumentation = instrumentation;
|
||||
|
||||
String outputPath = System.getProperty("arthas.output.dir", "arthas-output");
|
||||
arthasOutputDir = new File(outputPath);
|
||||
arthasOutputDir.mkdirs();
|
||||
|
||||
// 1. initSpy()
|
||||
initSpy();
|
||||
// 2. ArthasEnvironment
|
||||
initArthasEnvironment(args);
|
||||
// 3. init logger
|
||||
loggerContext = LogUtil.initLooger(arthasEnvironment);
|
||||
|
||||
// 4. start agent server
|
||||
bind(configure);
|
||||
|
||||
executorService = Executors.newCachedThreadPool(new ThreadFactory() {
|
||||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
@@ -109,9 +126,7 @@ public class ArthasBootstrap {
|
||||
Spy.init(AdviceWeaver.class.getClassLoader(), onBefore, onReturn, onThrows, beforeInvoke, afterInvoke, throwInvoke);
|
||||
}
|
||||
|
||||
public void bind(String args) throws Throwable {
|
||||
initSpy();
|
||||
|
||||
private void initArthasEnvironment(String args) throws IOException {
|
||||
if (arthasEnvironment == null) {
|
||||
arthasEnvironment = new ArthasEnvironment();
|
||||
}
|
||||
@@ -129,16 +144,33 @@ public class ArthasBootstrap {
|
||||
for (Entry<String, String> entry : argsMap.entrySet()) {
|
||||
mapWithPrefix.put("arthas." + entry.getKey(), entry.getValue());
|
||||
}
|
||||
mapWithPrefix.put(ARTHAS_HOME_PROPERTY, arthasHome());
|
||||
|
||||
MapPropertySource mapPropertySource = new MapPropertySource("args", mapWithPrefix);
|
||||
arthasEnvironment.addFirst(mapPropertySource);
|
||||
|
||||
tryToLoadArthasProperties();
|
||||
|
||||
Configure configure = new Configure();
|
||||
configure = new Configure();
|
||||
BinderUtils.inject(arthasEnvironment, configure);
|
||||
}
|
||||
|
||||
bind(configure);
|
||||
private String arthasHome() {
|
||||
if (ARTHAS_SHOME != null) {
|
||||
return ARTHAS_SHOME;
|
||||
}
|
||||
CodeSource codeSource = ArthasBootstrap.class.getProtectionDomain().getCodeSource();
|
||||
if (codeSource != null) {
|
||||
try {
|
||||
ARTHAS_SHOME = new File(codeSource.getLocation().toURI().getSchemeSpecificPart()).getParentFile().getAbsolutePath();
|
||||
} catch (Throwable e) {
|
||||
AnsiLog.error("try to load arthas.properties error", e);
|
||||
}
|
||||
}
|
||||
if (ARTHAS_SHOME == null) {
|
||||
ARTHAS_SHOME = new File("").getAbsolutePath();
|
||||
}
|
||||
return ARTHAS_SHOME;
|
||||
}
|
||||
|
||||
// try to load arthas.properties
|
||||
@@ -152,14 +184,7 @@ public class ArthasBootstrap {
|
||||
}
|
||||
|
||||
if (location == null) {
|
||||
CodeSource codeSource = ArthasBootstrap.class.getProtectionDomain().getCodeSource();
|
||||
if (codeSource != null) {
|
||||
try {
|
||||
location = new File(codeSource.getLocation().toURI().getSchemeSpecificPart()).getAbsolutePath();
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "can not find libasyncProfiler so", e);
|
||||
}
|
||||
}
|
||||
location = arthasHome();
|
||||
}
|
||||
|
||||
String configName = "arthas";
|
||||
@@ -179,6 +204,8 @@ public class ArthasBootstrap {
|
||||
boolean overrideAll = false;
|
||||
if (arthasEnvironment.containsProperty(CONFIG_OVERRIDE_ALL)) {
|
||||
overrideAll = arthasEnvironment.getRequiredProperty(CONFIG_OVERRIDE_ALL, boolean.class);
|
||||
} else {
|
||||
overrideAll = Boolean.parseBoolean(properties.getProperty(CONFIG_OVERRIDE_ALL, "false"));
|
||||
}
|
||||
|
||||
PropertySource propertySource = new PropertiesPropertySource(location, properties);
|
||||
@@ -224,7 +251,7 @@ public class ArthasBootstrap {
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logger.error("arthas", "start tunnel client error", t);
|
||||
logger().error("start tunnel client error", t);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -247,13 +274,13 @@ public class ArthasBootstrap {
|
||||
shellServer.registerTermServer(new HttpTelnetTermServer(configure.getIp(), configure.getTelnetPort(),
|
||||
options.getConnectionTimeout()));
|
||||
} else {
|
||||
logger.info("telnet port is {}, skip bind telnet server.", configure.getTelnetPort());
|
||||
logger().info("telnet port is {}, skip bind telnet server.", configure.getTelnetPort());
|
||||
}
|
||||
if (configure.getHttpPort() > 0) {
|
||||
shellServer.registerTermServer(new HttpTermServer(configure.getIp(), configure.getHttpPort(),
|
||||
options.getConnectionTimeout()));
|
||||
} else {
|
||||
logger.info("http port is {}, skip bind http server.", configure.getHttpPort());
|
||||
logger().info("http port is {}, skip bind http server.", configure.getHttpPort());
|
||||
}
|
||||
|
||||
for (CommandResolver resolver : resolvers) {
|
||||
@@ -262,18 +289,18 @@ public class ArthasBootstrap {
|
||||
|
||||
shellServer.listen(new BindHandler(isBindRef));
|
||||
|
||||
logger.info("as-server listening on network={};telnet={};http={};timeout={};", configure.getIp(),
|
||||
logger().info("as-server listening on network={};telnet={};http={};timeout={};", configure.getIp(),
|
||||
configure.getTelnetPort(), configure.getHttpPort(), options.getConnectionTimeout());
|
||||
// 异步回报启动次数
|
||||
if (configure.getStatUrl() != null) {
|
||||
logger.info("arthas stat url: {}", configure.getStatUrl());
|
||||
logger().info("arthas stat url: {}", configure.getStatUrl());
|
||||
}
|
||||
UserStatUtil.setStatUrl(configure.getStatUrl());
|
||||
UserStatUtil.arthasStart();
|
||||
|
||||
logger.info("as-server started in {} ms", System.currentTimeMillis() - start );
|
||||
logger().info("as-server started in {} ms", System.currentTimeMillis() - start );
|
||||
} catch (Throwable e) {
|
||||
logger.error(null, "Error during bind to port " + configure.getTelnetPort(), e);
|
||||
logger().error("Error during bind to port " + configure.getTelnetPort(), e);
|
||||
if (shellServer != null) {
|
||||
shellServer.close();
|
||||
}
|
||||
@@ -295,7 +322,7 @@ public class ArthasBootstrap {
|
||||
try {
|
||||
tunnelClient.stop();
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "stop tunnel client error", e);
|
||||
logger().error("arthas", "stop tunnel client error", e);
|
||||
}
|
||||
}
|
||||
executorService.shutdownNow();
|
||||
@@ -307,9 +334,10 @@ public class ArthasBootstrap {
|
||||
} catch (Throwable t) {
|
||||
// ignore
|
||||
}
|
||||
logger.info("as-server destroy completed.");
|
||||
// see https://github.com/alibaba/arthas/issues/319
|
||||
LogUtil.closeResultLogger();
|
||||
logger().info("as-server destroy completed.");
|
||||
if (loggerContext != null) {
|
||||
loggerContext.stop();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -317,10 +345,11 @@ public class ArthasBootstrap {
|
||||
*
|
||||
* @param instrumentation JVM增强
|
||||
* @return ArthasServer单例
|
||||
* @throws Throwable
|
||||
*/
|
||||
public synchronized static ArthasBootstrap getInstance(Instrumentation instrumentation) {
|
||||
public synchronized static ArthasBootstrap getInstance(Instrumentation instrumentation, String args) throws Throwable {
|
||||
if (arthasBootstrap == null) {
|
||||
arthasBootstrap = new ArthasBootstrap(instrumentation);
|
||||
arthasBootstrap = new ArthasBootstrap(instrumentation, args);
|
||||
}
|
||||
return arthasBootstrap;
|
||||
}
|
||||
@@ -348,13 +377,17 @@ public class ArthasBootstrap {
|
||||
Method agentDestroyMethod = spyClass.getMethod("destroy");
|
||||
agentDestroyMethod.invoke(null);
|
||||
} catch (ClassNotFoundException e) {
|
||||
logger.error(null, "Spy load failed from ArthasClassLoader, which should not happen", e);
|
||||
logger().error("Spy load failed from ArthasClassLoader, which should not happen", e);
|
||||
} catch (Exception e) {
|
||||
logger.error(null, "Spy destroy failed: ", e);
|
||||
logger().error("Spy destroy failed: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
public TunnelClient getTunnelClient() {
|
||||
return tunnelClient;
|
||||
}
|
||||
|
||||
private Logger logger() {
|
||||
return LoggerFactory.getLogger(this.getClass());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.taobao.arthas.core.shell.handlers;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.future.Future;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
*/
|
||||
public class BindHandler implements Handler<Future<Void>> {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(BindHandler.class);
|
||||
|
||||
private AtomicBoolean isBindRef;
|
||||
|
||||
@@ -22,7 +22,7 @@ public class BindHandler implements Handler<Future<Void>> {
|
||||
@Override
|
||||
public void handle(Future<Void> event) {
|
||||
if (event.failed()) {
|
||||
logger.error(null, "Error listening term server:", event.cause());
|
||||
logger.error("Error listening term server:", event.cause());
|
||||
isBindRef.compareAndSet(true, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
package com.taobao.arthas.core.shell.handlers;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.future.Future;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
/**
|
||||
* @author beiwei30 on 22/11/2016.
|
||||
*/
|
||||
public class NoOpHandler implements Handler {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(NoOpHandler.class);
|
||||
|
||||
@Override
|
||||
public void handle(Object event) {
|
||||
if (event instanceof Future && ((Future) event).failed()) {
|
||||
logger.error(null, "Error listening term server:", ((Future) event).cause());
|
||||
logger.error("Error listening term server:", ((Future) event).cause());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.shell.impl;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.Shell;
|
||||
import com.taobao.arthas.core.shell.ShellServer;
|
||||
import com.taobao.arthas.core.shell.cli.CliToken;
|
||||
@@ -19,8 +21,7 @@ import com.taobao.arthas.core.shell.system.JobController;
|
||||
import com.taobao.arthas.core.shell.system.impl.InternalCommandManager;
|
||||
import com.taobao.arthas.core.shell.system.impl.JobControllerImpl;
|
||||
import com.taobao.arthas.core.shell.term.Term;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.util.Date;
|
||||
@@ -35,7 +36,7 @@ import java.util.UUID;
|
||||
*/
|
||||
public class ShellImpl implements Shell {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(ShellImpl.class);
|
||||
|
||||
private JobControllerImpl jobController;
|
||||
final String id;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.shell.impl;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.server.ArthasBootstrap;
|
||||
import com.taobao.arthas.core.shell.Shell;
|
||||
import com.taobao.arthas.core.shell.ShellServer;
|
||||
@@ -17,8 +19,7 @@ import com.taobao.arthas.core.shell.system.impl.InternalCommandManager;
|
||||
import com.taobao.arthas.core.shell.system.impl.JobControllerImpl;
|
||||
import com.taobao.arthas.core.shell.term.Term;
|
||||
import com.taobao.arthas.core.shell.term.TermServer;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.util.ArrayList;
|
||||
@@ -40,7 +41,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
*/
|
||||
public class ShellServerImpl extends ShellServer {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(ShellServerImpl.class);
|
||||
|
||||
private final CopyOnWriteArrayList<CommandResolver> resolvers;
|
||||
private final InternalCommandManager commandManager;
|
||||
@@ -177,7 +178,7 @@ public class ShellServerImpl extends ShellServer {
|
||||
if (job != null) {
|
||||
// close shell's foreground job
|
||||
job.terminate();
|
||||
logger.info(null, "Session {} closed, so terminate foreground job, id: {}, line: {}",
|
||||
logger.info("Session {} closed, so terminate foreground job, id: {}, line: {}",
|
||||
shell.session().getSessionId(), job.id(), job.line());
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -8,13 +8,14 @@ import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.GlobalOptions;
|
||||
import com.taobao.arthas.core.shell.cli.CliToken;
|
||||
import com.taobao.arthas.core.shell.handlers.Handler;
|
||||
import com.taobao.arthas.core.shell.impl.ShellImpl;
|
||||
import com.taobao.arthas.core.shell.system.Job;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
|
||||
/**
|
||||
* 全局的Job Controller,不应该存在启停的概念,不需要在连接的断开时关闭,
|
||||
@@ -25,7 +26,7 @@ public class GlobalJobControllerImpl extends JobControllerImpl {
|
||||
|
||||
private Timer timer = new Timer("job-timeout", true);
|
||||
private Map<Integer, TimerTask> jobTimeoutTaskMap = new HashMap<Integer, TimerTask>();
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(GlobalJobControllerImpl.class);
|
||||
|
||||
@Override
|
||||
public void close(final Handler<Void> completionHandler) {
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.taobao.arthas.core.shell.system.Process;
|
||||
import com.taobao.arthas.core.shell.system.impl.ProcessImpl.ProcessOutput;
|
||||
import com.taobao.arthas.core.shell.term.Term;
|
||||
import com.taobao.arthas.core.util.Constants;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.TokenUtils;
|
||||
|
||||
import io.termd.core.function.Function;
|
||||
@@ -171,7 +172,7 @@ public class JobControllerImpl implements JobController {
|
||||
String name = getRedirectFileName(tokens);
|
||||
if (name == null) {
|
||||
// 如果没有指定重定向文件名,那么重定向到以jobid命名的缓存中
|
||||
name = Constants.CACHE_ROOT + File.separator + Constants.PID + File.separator + jobId;
|
||||
name = LogUtil.cacheDir() + File.separator + Constants.PID + File.separator + jobId;
|
||||
cacheLocation = name;
|
||||
|
||||
if (getRedirectJobCount() == 8) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.taobao.arthas.core.shell.system.impl;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.advisor.AdviceListener;
|
||||
import com.taobao.arthas.core.advisor.AdviceWeaver;
|
||||
import com.taobao.arthas.core.server.ArthasBootstrap;
|
||||
@@ -13,12 +15,11 @@ import com.taobao.arthas.core.shell.session.Session;
|
||||
import com.taobao.arthas.core.shell.system.ExecStatus;
|
||||
import com.taobao.arthas.core.shell.system.Process;
|
||||
import com.taobao.arthas.core.shell.term.Tty;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
import com.taobao.arthas.core.util.usage.StyledUsageFormatter;
|
||||
import com.taobao.middleware.cli.CLIException;
|
||||
import com.taobao.middleware.cli.CommandLine;
|
||||
import com.taobao.middleware.cli.UsageMessageFormatter;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Color;
|
||||
|
||||
import io.termd.core.function.Function;
|
||||
@@ -33,7 +34,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
*/
|
||||
public class ProcessImpl implements Process {
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(ProcessImpl.class);
|
||||
|
||||
private Command commandContext;
|
||||
private Handler<CommandProcess> handler;
|
||||
@@ -369,7 +370,7 @@ public class ProcessImpl implements Process {
|
||||
try {
|
||||
handler.handle(process);
|
||||
} catch (Throwable t) {
|
||||
logger.error(null, "Error during processing the command:", t);
|
||||
logger.error("Error during processing the command:", t);
|
||||
process.write("Error during processing the command: " + t.getMessage() + "\n");
|
||||
terminate(1, null);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package com.taobao.arthas.core.shell.term.impl;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.cli.CliToken;
|
||||
import com.taobao.arthas.core.shell.cli.CliTokens;
|
||||
import com.taobao.arthas.core.shell.handlers.Handler;
|
||||
import com.taobao.arthas.core.shell.session.Session;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
|
||||
import io.termd.core.function.Consumer;
|
||||
import io.termd.core.readline.Completion;
|
||||
@@ -17,7 +18,7 @@ import java.util.List;
|
||||
* @author beiwei30 on 23/11/2016.
|
||||
*/
|
||||
class CompletionHandler implements Consumer<Completion> {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(CompletionHandler.class);
|
||||
private final Handler<com.taobao.arthas.core.shell.cli.Completion> completionHandler;
|
||||
private final Session session;
|
||||
|
||||
@@ -35,7 +36,7 @@ class CompletionHandler implements Consumer<Completion> {
|
||||
completionHandler.handle(comp);
|
||||
} catch (Throwable t) {
|
||||
// t.printStackTrace();
|
||||
logger.error(null, "completion error", t);
|
||||
logger.error("completion error", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package com.taobao.arthas.core.shell.term.impl;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.ShellServerOptions;
|
||||
import com.taobao.arthas.core.shell.term.TermServer;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
import io.termd.core.readline.Keymap;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
@@ -14,7 +15,7 @@ import java.io.InputStream;
|
||||
*/
|
||||
public class Helper {
|
||||
|
||||
private static Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(Helper.class);
|
||||
|
||||
public static Keymap loadKeymap() {
|
||||
return new Keymap(loadInputRcFile());
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.taobao.arthas.core.shell.term.impl;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.future.Future;
|
||||
import com.taobao.arthas.core.shell.handlers.Handler;
|
||||
import com.taobao.arthas.core.shell.term.Term;
|
||||
import com.taobao.arthas.core.shell.term.TermServer;
|
||||
import com.taobao.arthas.core.shell.term.impl.http.NettyWebsocketTtyBootstrap;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
import io.termd.core.function.Consumer;
|
||||
import io.termd.core.tty.TtyConnection;
|
||||
|
||||
@@ -17,7 +18,7 @@ import java.util.concurrent.TimeUnit;
|
||||
*/
|
||||
public class HttpTermServer extends TermServer {
|
||||
|
||||
private static Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(HttpTermServer.class);
|
||||
|
||||
private Handler<Term> termHandler;
|
||||
private NettyWebsocketTtyBootstrap bootstrap;
|
||||
@@ -50,7 +51,7 @@ public class HttpTermServer extends TermServer {
|
||||
}).get(connectionTimeout, TimeUnit.MILLISECONDS);
|
||||
listenHandler.handle(Future.<TermServer>succeededFuture());
|
||||
} catch (Throwable t) {
|
||||
logger.error(null, "Error listening to port " + port, t);
|
||||
logger.error("Error listening to port " + port, t);
|
||||
listenHandler.handle(Future.<TermServer>failedFuture(t));
|
||||
}
|
||||
return this;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.taobao.arthas.core.shell.term.impl;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.future.Future;
|
||||
import com.taobao.arthas.core.shell.handlers.Handler;
|
||||
import com.taobao.arthas.core.shell.term.Term;
|
||||
import com.taobao.arthas.core.shell.term.TermServer;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import io.termd.core.function.Consumer;
|
||||
import io.termd.core.telnet.netty.NettyTelnetTtyBootstrap;
|
||||
import io.termd.core.tty.TtyConnection;
|
||||
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
|
||||
*/
|
||||
public class TelnetTermServer extends TermServer {
|
||||
|
||||
private static Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(TelnetTermServer.class);
|
||||
|
||||
private NettyTelnetTtyBootstrap bootstrap;
|
||||
private String hostIp;
|
||||
@@ -53,7 +53,7 @@ public class TelnetTermServer extends TermServer {
|
||||
}).get(connectionTimeout, TimeUnit.MILLISECONDS);
|
||||
listenHandler.handle(Future.<TermServer>succeededFuture());
|
||||
} catch (Throwable t) {
|
||||
logger.error(null, "Error listening to port " + port, t);
|
||||
logger.error("Error listening to port " + port, t);
|
||||
listenHandler.handle(Future.<TermServer>failedFuture(t));
|
||||
}
|
||||
return this;
|
||||
|
||||
+5
-4
@@ -5,9 +5,10 @@ import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.common.IOUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer;
|
||||
|
||||
import io.netty.channel.ChannelFuture;
|
||||
import io.netty.channel.ChannelFutureListener;
|
||||
@@ -31,7 +32,7 @@ import io.termd.core.util.Logging;
|
||||
* @author hengyunabc 2019-11-06
|
||||
*/
|
||||
public class HttpRequestHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(HttpTelnetTermServer.class);
|
||||
|
||||
private final String wsUri;
|
||||
|
||||
@@ -103,7 +104,7 @@ public class HttpRequestHandler extends SimpleChannelInboundHandler<FullHttpRequ
|
||||
}
|
||||
|
||||
} catch (Throwable e) {
|
||||
logger.error("arthas", "arthas process http request error: " + request.uri(), e);
|
||||
logger.error("arthas process http request error: " + request.uri(), e);
|
||||
} finally {
|
||||
ctx.write(response);
|
||||
ChannelFuture future = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
|
||||
|
||||
+4
-4
@@ -2,14 +2,14 @@ package com.taobao.arthas.core.shell.term.impl.httptelnet;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.core.shell.future.Future;
|
||||
import com.taobao.arthas.core.shell.handlers.Handler;
|
||||
import com.taobao.arthas.core.shell.term.Term;
|
||||
import com.taobao.arthas.core.shell.term.TermServer;
|
||||
import com.taobao.arthas.core.shell.term.impl.Helper;
|
||||
import com.taobao.arthas.core.shell.term.impl.TermImpl;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
|
||||
import io.termd.core.function.Consumer;
|
||||
import io.termd.core.tty.TtyConnection;
|
||||
@@ -22,7 +22,7 @@ import io.termd.core.tty.TtyConnection;
|
||||
*/
|
||||
public class HttpTelnetTermServer extends TermServer {
|
||||
|
||||
private static Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(HttpTelnetTermServer.class);
|
||||
|
||||
private Handler<Term> termHandler;
|
||||
private NettyHttpTelnetTtyBootstrap bootstrap;
|
||||
@@ -55,7 +55,7 @@ public class HttpTelnetTermServer extends TermServer {
|
||||
}).get(connectionTimeout, TimeUnit.MILLISECONDS);
|
||||
listenHandler.handle(Future.<TermServer>succeededFuture());
|
||||
} catch (Throwable t) {
|
||||
logger.error(null, "Error listening to port " + port, t);
|
||||
logger.error("Error listening to port " + port, t);
|
||||
listenHandler.handle(Future.<TermServer>failedFuture(t));
|
||||
}
|
||||
return this;
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package com.taobao.arthas.core.util;
|
||||
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.common.PidUtils;
|
||||
import com.taobao.arthas.core.shell.ShellServerOptions;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.text.Color;
|
||||
import com.taobao.text.Decoration;
|
||||
import com.taobao.text.ui.TableElement;
|
||||
@@ -29,7 +30,7 @@ public class ArthasBanner {
|
||||
private static String VERSION = "unknown";
|
||||
private static String THANKS = "";
|
||||
|
||||
private static final Logger logger = LogUtil.getArthasLogger();
|
||||
private static final Logger logger = LoggerFactory.getLogger(ArthasBanner.class);
|
||||
|
||||
static {
|
||||
try {
|
||||
|
||||
@@ -5,8 +5,6 @@ import java.io.File;
|
||||
import com.taobao.arthas.common.PidUtils;
|
||||
import com.taobao.arthas.core.view.Ansi;
|
||||
|
||||
import static com.taobao.arthas.core.util.LogUtil.LOGS_DIR;
|
||||
|
||||
/**
|
||||
* @author ralf0131 2016-12-28 16:20.
|
||||
*/
|
||||
@@ -53,9 +51,4 @@ public class Constants {
|
||||
*/
|
||||
public static final String PID = PidUtils.currentPid();
|
||||
|
||||
/**
|
||||
* 缓存目录
|
||||
*/
|
||||
public static final String CACHE_ROOT = LOGS_DIR + File.separator + "arthas-cache";
|
||||
|
||||
}
|
||||
|
||||
@@ -1,141 +1,137 @@
|
||||
package com.taobao.arthas.core.util;
|
||||
|
||||
import com.taobao.middleware.logger.Level;
|
||||
import com.taobao.middleware.logger.Logger;
|
||||
import com.taobao.middleware.logger.LoggerFactory;
|
||||
import com.taobao.middleware.logger.support.LogLog;
|
||||
import com.taobao.middleware.logger.support.LoggerHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Iterator;
|
||||
|
||||
import com.alibaba.arthas.deps.ch.qos.logback.classic.LoggerContext;
|
||||
import com.alibaba.arthas.deps.ch.qos.logback.classic.joran.JoranConfigurator;
|
||||
import com.alibaba.arthas.deps.ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import com.alibaba.arthas.deps.ch.qos.logback.core.Appender;
|
||||
import com.alibaba.arthas.deps.ch.qos.logback.core.rolling.RollingFileAppender;
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
import com.taobao.arthas.common.AnsiLog;
|
||||
import com.taobao.arthas.core.env.ArthasEnvironment;
|
||||
|
||||
/**
|
||||
* Arthas日志
|
||||
* Created by vlinux on 15/3/8.
|
||||
*
|
||||
* @author hengyunabc
|
||||
*
|
||||
*/
|
||||
public class LogUtil {
|
||||
|
||||
/**
|
||||
* Arthas 内部日志Logger
|
||||
*/
|
||||
private static final Logger arthasLogger;
|
||||
|
||||
private static final org.slf4j.Logger resultLogger;
|
||||
public static final String LOGGING_CONFIG_PROPERTY = "arthas.logging.config";
|
||||
public static final String LOGGING_CONFIG = "${arthas.logging.config:${arthas.home}/logback.xml}";
|
||||
|
||||
/**
|
||||
* 接管Netty的Logger
|
||||
* The name of the property that contains the name of the log file. Names can be
|
||||
* an exact location or relative to the current directory.
|
||||
*/
|
||||
private static final Logger nettyLogger;
|
||||
public static final String FILE_NAME_PROPERTY = "arthas.logging.file.name";
|
||||
public static final String ARTHAS_LOG_FILE = "ARTHAS_LOG_FILE";
|
||||
|
||||
/**
|
||||
* 接管termd的Logger
|
||||
* The name of the property that contains the directory where log files are
|
||||
* written.
|
||||
*/
|
||||
private static final Logger termdLogger;
|
||||
public static final String FILE_PATH_PROPERTY = "arthas.logging.file.path";
|
||||
public static final String ARTHAS_LOG_PATH = "ARTHAS_LOG_PATH";
|
||||
|
||||
private static String logFile = "";
|
||||
|
||||
/**
|
||||
* 接管tunnel client的Logger
|
||||
* <pre>
|
||||
* 1. 尝试从 arthas.logging.config 这个配置里加载 logback.xml
|
||||
* 2. 尝试从 arthas.home 下面找 logback.xml
|
||||
*
|
||||
* 可以用 arthas.logging.file.name 指定具体arthas.log的名字
|
||||
* 可以用 arthas.logging.file.path 指定具体arthas.log的目录
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @param env
|
||||
*/
|
||||
private static final Logger tunnelClientLogger;
|
||||
public static LoggerContext initLooger(ArthasEnvironment env) {
|
||||
String loggingConfig = env.resolvePlaceholders(LOGGING_CONFIG);
|
||||
if (loggingConfig == null || loggingConfig.trim().isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
AnsiLog.debug("arthas logging file: " + loggingConfig);
|
||||
File configFile = new File(loggingConfig);
|
||||
if (!configFile.isFile()) {
|
||||
AnsiLog.error("can not find arthas logging config: " + loggingConfig);
|
||||
return null;
|
||||
}
|
||||
|
||||
public static final String LOGGER_FILE;
|
||||
try {
|
||||
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
|
||||
loggerContext.reset();
|
||||
|
||||
/**
|
||||
* default value is ~/logs
|
||||
*/
|
||||
public static String LOGS_DIR;
|
||||
|
||||
/**
|
||||
* default value is ~/logs/arthas
|
||||
*/
|
||||
public static String LOGS_ARTHAS_DIR;
|
||||
|
||||
static {
|
||||
detectArthasLogDirectory();
|
||||
LOGGER_FILE = LoggerHelper.getLogFile("arthas", "arthas.log");
|
||||
|
||||
LogLog.setQuietMode(true);
|
||||
|
||||
LoggerHelper.setPattern("arthas-cache", "%d{yyyy-MM-dd HH:mm:ss.SSS}%n%m%n");
|
||||
|
||||
arthasLogger = LoggerFactory.getLogger("arthas");
|
||||
arthasLogger.activateAppenderWithTimeAndSizeRolling("arthas", "arthas.log", "UTF-8", "100MB");
|
||||
arthasLogger.setLevel(Level.INFO);
|
||||
arthasLogger.setAdditivity(false);
|
||||
|
||||
com.taobao.middleware.logger.Logger log = LoggerFactory.getLogger("result");
|
||||
log.activateAppenderWithSizeRolling("arthas-cache", "result.log", "UTF-8", "100MB", 3);
|
||||
log.setAdditivity(false);
|
||||
log.activateAsync(64, -1);
|
||||
resultLogger = (org.slf4j.Logger) log.getDelegate();
|
||||
|
||||
nettyLogger = LoggerFactory.getLogger("io.netty");
|
||||
nettyLogger.activateAppender(arthasLogger);
|
||||
nettyLogger.setLevel(Level.INFO);
|
||||
nettyLogger.setAdditivity(false);
|
||||
|
||||
termdLogger = LoggerFactory.getLogger("io.termd");
|
||||
termdLogger.activateAppender(arthasLogger);
|
||||
termdLogger.setLevel(Level.INFO);
|
||||
termdLogger.setAdditivity(false);
|
||||
|
||||
tunnelClientLogger = LoggerFactory.getLogger("com.alibaba.arthas.tunnel.client");
|
||||
tunnelClientLogger.activateAppender(arthasLogger);
|
||||
tunnelClientLogger.setLevel(Level.INFO);
|
||||
tunnelClientLogger.setAdditivity(false);
|
||||
}
|
||||
|
||||
private static void detectArthasLogDirectory() {
|
||||
String dpath = System.getProperty("JM.LOG.PATH");
|
||||
if (StringUtils.isEmpty(dpath)) {
|
||||
File logDirectory = new File(System.getProperty("user.home") + File.separator + "logs" + File.separator);
|
||||
try {
|
||||
// when user is nobody mkdir will fail. #572
|
||||
logDirectory.mkdirs();
|
||||
} catch (Throwable e) {
|
||||
// ignore
|
||||
String fileName = env.getProperty(FILE_NAME_PROPERTY);
|
||||
;
|
||||
if (fileName != null) {
|
||||
loggerContext.putProperty(ARTHAS_LOG_FILE, fileName);
|
||||
}
|
||||
if (!logDirectory.exists()) {
|
||||
// try to set a temp directory
|
||||
logDirectory = new File(System.getProperty("java.io.tmpdir") + File.separator + "logs" + File.separator);
|
||||
try {
|
||||
logDirectory.mkdirs();
|
||||
} catch (Throwable e) {
|
||||
// ignore
|
||||
String filePath = env.getProperty(FILE_PATH_PROPERTY);
|
||||
if (filePath != null) {
|
||||
loggerContext.putProperty(ARTHAS_LOG_PATH, filePath);
|
||||
}
|
||||
|
||||
JoranConfigurator configurator = new JoranConfigurator();
|
||||
configurator.setContext(loggerContext);
|
||||
configurator.doConfigure(configFile.toURI().toURL()); // load logback xml file
|
||||
|
||||
// 查找 arthas.log appender
|
||||
Iterator<Appender<ILoggingEvent>> appenders = loggerContext.getLogger("root").iteratorForAppenders();
|
||||
|
||||
while (appenders.hasNext()) {
|
||||
Appender<ILoggingEvent> appender = appenders.next();
|
||||
if (appender instanceof RollingFileAppender) {
|
||||
RollingFileAppender fileAppender = (RollingFileAppender) appender;
|
||||
if ("ARTHAS".equalsIgnoreCase(fileAppender.getName())) {
|
||||
logFile = fileAppender.getFile();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (logDirectory.exists()) {
|
||||
LOGS_DIR = logDirectory.getAbsolutePath();
|
||||
System.setProperty("JM.LOG.PATH", logDirectory.getAbsolutePath());
|
||||
|
||||
return loggerContext;
|
||||
} catch (Throwable e) {
|
||||
AnsiLog.error("try to load arthas logging config file error: " + configFile, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String loggingFile() {
|
||||
if (logFile == null || logFile.trim().isEmpty()) {
|
||||
return "arthas.log";
|
||||
}
|
||||
return logFile;
|
||||
}
|
||||
|
||||
public static String loggingDir() {
|
||||
if (logFile != null && !logFile.isEmpty()) {
|
||||
String parent = new File(logFile).getParent();
|
||||
if (parent != null) {
|
||||
return parent;
|
||||
}
|
||||
}
|
||||
return new File("").getAbsolutePath();
|
||||
}
|
||||
|
||||
public static String cacheDir() {
|
||||
File logsDir = new File(loggingDir()).getParentFile();
|
||||
if (logsDir.exists()) {
|
||||
File arthasCacheDir = new File(logsDir, "arthas-cache");
|
||||
arthasCacheDir.mkdirs();
|
||||
return arthasCacheDir.getAbsolutePath();
|
||||
} else {
|
||||
LOGS_DIR = dpath;
|
||||
File arthasCacheDir = new File("arthas-cache");
|
||||
arthasCacheDir.mkdirs();
|
||||
return arthasCacheDir.getAbsolutePath();
|
||||
}
|
||||
if (StringUtils.isEmpty(LOGS_DIR)) {
|
||||
LOGS_DIR = "logs";
|
||||
}
|
||||
LOGS_ARTHAS_DIR = LOGS_DIR + File.separator + "arthas";
|
||||
}
|
||||
|
||||
public static Logger getArthasLogger() {
|
||||
return arthasLogger;
|
||||
}
|
||||
|
||||
public static org.slf4j.Logger getResultLogger() {
|
||||
return resultLogger;
|
||||
}
|
||||
|
||||
public static void closeResultLogger() {
|
||||
closeSlf4jLogger(resultLogger);
|
||||
}
|
||||
|
||||
public static void closeSlf4jLogger(org.slf4j.Logger logger) {
|
||||
if (logger != null) {
|
||||
if (logger instanceof ch.qos.logback.classic.Logger) {
|
||||
((ch.qos.logback.classic.Logger) logger).detachAndStopAllAppenders();
|
||||
} else {
|
||||
// arthas strongly depends on logback.
|
||||
// So do nothing here
|
||||
// https://github.com/alibaba/arthas/issues/319
|
||||
}
|
||||
}
|
||||
public static Logger getResultLogger() {
|
||||
return LoggerFactory.getLogger("result");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.taobao.arthas.core.util.collection;
|
||||
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.alibaba.arthas.deps.org.slf4j.Logger;
|
||||
import com.alibaba.arthas.deps.org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
@@ -14,7 +15,7 @@ import static java.lang.System.arraycopy;
|
||||
* @param <E>
|
||||
*/
|
||||
public class ThreadUnsafeGaStack<E> implements GaStack<E> {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ThreadUnsafeGaStack.class);
|
||||
private final static int EMPTY_INDEX = -1;
|
||||
private final static int DEFAULT_STACK_DEEP = 12;
|
||||
|
||||
@@ -38,8 +39,10 @@ public class ThreadUnsafeGaStack<E> implements GaStack<E> {
|
||||
private void ensureCapacityInternal(int expectDeep) {
|
||||
final int currentStackSize = elementArray.length;
|
||||
if (elementArray.length <= expectDeep) {
|
||||
LogUtil.getArthasLogger().debug("resize GaStack to double length: " + currentStackSize * 2 + " for thread: "
|
||||
+ Thread.currentThread().getName());
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("resize GaStack to double length: " + currentStackSize * 2 + " for thread: "
|
||||
+ Thread.currentThread().getName());
|
||||
}
|
||||
final Object[] newElementArray = new Object[currentStackSize * 2];
|
||||
arraycopy(elementArray, 0, newElementArray, 0, currentStackSize);
|
||||
this.elementArray = newElementArray;
|
||||
@@ -64,8 +67,9 @@ public class ThreadUnsafeGaStack<E> implements GaStack<E> {
|
||||
} finally {
|
||||
if (current == EMPTY_INDEX && elementArray.length > DEFAULT_STACK_DEEP) {
|
||||
elementArray = new Object[DEFAULT_STACK_DEEP];
|
||||
LogUtil.getArthasLogger().debug(
|
||||
"resize GaStack to default length for thread: " + Thread.currentThread().getName());
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("resize GaStack to default length for thread: " + Thread.currentThread().getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
|
||||
<property name="ARTHAS_LOG_PATH" value="${ARTHAS_LOG_PATH:-${user.home}/logs/arthas}" />
|
||||
<property name="ARTHAS_LOG_FILE" value="${ARTHAS_LOG_FILE:-${ARTHAS_LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/arthas.log}" />
|
||||
|
||||
<property name="RESULT_LOG_FILE" value="${RESULT_LOG_FILE:-${ARTHAS_LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/../arthas-cache/result.log}" />
|
||||
|
||||
<!-- arthas.log -->
|
||||
<appender name="ARTHAS" class="com.alibaba.arthas.deps.ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${ARTHAS_LOG_FILE}</file>
|
||||
<encoder>
|
||||
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n
|
||||
</pattern>
|
||||
</encoder>
|
||||
<rollingPolicy class="com.alibaba.arthas.deps.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${ARTHAS_LOG_FILE}.%d{yyyy-MM-dd}.%i.log
|
||||
</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
<maxFileSize>1MB</maxFileSize>
|
||||
<totalSizeCap>10MB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<!-- result.log -->
|
||||
<appender name="RESULT" class="com.alibaba.arthas.deps.ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${RESULT_LOG_FILE}</file>
|
||||
<encoder>
|
||||
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n
|
||||
</pattern>
|
||||
</encoder>
|
||||
<rollingPolicy class="com.alibaba.arthas.deps.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${RESULT_LOG_FILE}.%d{yyyy-MM-dd}.%i.log
|
||||
</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
<maxFileSize>1MB</maxFileSize>
|
||||
<totalSizeCap>10MB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<!-- <appender name="CONSOLE" class="com.alibaba.arthas.deps.ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
|
||||
<charset>utf8</charset>
|
||||
</encoder>
|
||||
</appender> -->
|
||||
|
||||
<result level="INFO">
|
||||
<!-- <appender-ref ref="CONSOLE" /> -->
|
||||
<appender-ref ref="RESULT" />
|
||||
</result>
|
||||
|
||||
<root level="INFO">
|
||||
<!-- <appender-ref ref="CONSOLE" /> -->
|
||||
<appender-ref ref="ARTHAS" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user