|
|
logger
|
|
|
===
|
|
|
|
|
|
[`logger` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-logger)
|
|
|
|
|
|
> Print the logger information, update the logger level
|
|
|
|
|
|
### Usage
|
|
|
|
|
|
#### Print the logger information
|
|
|
|
|
|
Take the following `logback.xml` as an example:
|
|
|
|
|
|
```xml
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
<configuration>
|
|
|
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
|
<file>app.log</file>
|
|
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
|
|
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
|
|
|
<maxFileSize>100MB</maxFileSize>
|
|
|
<maxHistory>60</maxHistory>
|
|
|
<totalSizeCap>2GB</totalSizeCap>
|
|
|
</rollingPolicy>
|
|
|
<encoder>
|
|
|
<pattern>%logger{35} - %msg%n</pattern>
|
|
|
</encoder>
|
|
|
</appender>
|
|
|
|
|
|
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
|
|
|
<appender-ref ref="APPLICATION" />
|
|
|
</appender>
|
|
|
|
|
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
|
|
<encoder>
|
|
|
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n
|
|
|
</pattern>
|
|
|
<charset>utf8</charset>
|
|
|
</encoder>
|
|
|
</appender>
|
|
|
|
|
|
<root level="INFO">
|
|
|
<appender-ref ref="CONSOLE" />
|
|
|
<appender-ref ref="ASYNC" />
|
|
|
</root>
|
|
|
</configuration>
|
|
|
```
|
|
|
|
|
|
|
|
|
The result of the `logger` command:
|
|
|
|
|
|
```bash
|
|
|
[arthas@2062]$ logger
|
|
|
name ROOT
|
|
|
class ch.qos.logback.classic.Logger
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
level INFO
|
|
|
effectiveLevel INFO
|
|
|
additivity true
|
|
|
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
|
|
|
appenders name CONSOLE
|
|
|
class ch.qos.logback.core.ConsoleAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
target System.out
|
|
|
name APPLICATION
|
|
|
class ch.qos.logback.core.rolling.RollingFileAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
file app.log
|
|
|
name ASYNC
|
|
|
class ch.qos.logback.classic.AsyncAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
appenderRef [APPLICATION]
|
|
|
```
|
|
|
|
|
|
In the `appenders` section:
|
|
|
|
|
|
* The target of `CONSOLE` logger is `System.out`
|
|
|
* `APPLICATION` logger is `RollingFileAppender`, the file is `app.log`
|
|
|
* `ASYNC` its `appenderRef` is `APPLICATION`, which means asynchronous output to the file
|
|
|
|
|
|
#### View logger information for the special name
|
|
|
|
|
|
```bash
|
|
|
[arthas@2062]$ logger -n org.springframework.web
|
|
|
name org.springframework.web
|
|
|
class ch.qos.logback.classic.Logger
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
level null
|
|
|
effectiveLevel INFO
|
|
|
additivity true
|
|
|
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
|
|
|
```
|
|
|
|
|
|
#### View logger information for the special classloader
|
|
|
|
|
|
Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader.
|
|
|
|
|
|
if you use`-c`, you have to manually type hashcode by `-c <hashcode>`.
|
|
|
|
|
|
```bash
|
|
|
[arthas@2062]$ logger -c 2a139a55
|
|
|
name ROOT
|
|
|
class ch.qos.logback.classic.Logger
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
level DEBUG
|
|
|
effectiveLevel DEBUG
|
|
|
additivity true
|
|
|
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
|
|
|
appenders name CONSOLE
|
|
|
class ch.qos.logback.core.ConsoleAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
target System.out
|
|
|
name APPLICATION
|
|
|
class ch.qos.logback.core.rolling.RollingFileAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
file app.log
|
|
|
name ASYNC
|
|
|
class ch.qos.logback.classic.AsyncAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
appenderRef [APPLICATION]
|
|
|
```
|
|
|
|
|
|
For classloader with only one instance, it can be specified by `--classLoaderClass` using class name, which is more convenient to use.
|
|
|
|
|
|
`logger --classLoaderClass sun.misc.Launcher$AppClassLoader`
|
|
|
|
|
|
* PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader.
|
|
|
|
|
|
The value of `--classloaderclass` is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, `-c <hashcode>` is dynamic.
|
|
|
|
|
|
#### Update logger level
|
|
|
|
|
|
```bash
|
|
|
[arthas@2062]$ logger --name ROOT --level debug
|
|
|
update logger level success.
|
|
|
```
|
|
|
|
|
|
#### Speecify classloader to update logger level
|
|
|
|
|
|
By default,logger command will be executed under SystemClassloader, if the application is a traditional `war`, or using spring boot fat jar, then it needs to specify classloader。
|
|
|
|
|
|
You can first use `sc -d yourClassName` to check specified classloader hashcode,then specify classloader when updating logger level:
|
|
|
|
|
|
```bash
|
|
|
[arthas@2062]$ logger -c 2a139a55 --name ROOT --level debug
|
|
|
```
|
|
|
|
|
|
#### View the logger information without appenders
|
|
|
|
|
|
|
|
|
By default, the `logger` command only prints information about the logger with appenders. If you want to see information about loggers without `appender`, you can use the parameter `--include-no-appender`.
|
|
|
|
|
|
Note that the output will usually be very long.
|
|
|
|
|
|
```bash
|
|
|
[arthas@2062]$ logger --include-no-appender
|
|
|
name ROOT
|
|
|
class ch.qos.logback.classic.Logger
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
level DEBUG
|
|
|
effectiveLevel DEBUG
|
|
|
additivity true
|
|
|
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
|
|
|
appenders name CONSOLE
|
|
|
class ch.qos.logback.core.ConsoleAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
target System.out
|
|
|
name APPLICATION
|
|
|
class ch.qos.logback.core.rolling.RollingFileAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
file app.log
|
|
|
name ASYNC
|
|
|
class ch.qos.logback.classic.AsyncAppender
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
appenderRef [APPLICATION]
|
|
|
|
|
|
name com
|
|
|
class ch.qos.logback.classic.Logger
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
level null
|
|
|
effectiveLevel DEBUG
|
|
|
additivity true
|
|
|
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
|
|
|
|
|
|
name com.alibaba
|
|
|
class ch.qos.logback.classic.Logger
|
|
|
classLoader sun.misc.Launcher$AppClassLoader@2a139a55
|
|
|
classLoaderHash 2a139a55
|
|
|
level null
|
|
|
effectiveLevel DEBUG
|
|
|
additivity true
|
|
|
codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
|
|
|
...
|
|
|
```
|