• JDK 11统一日志管理


    JDK 11统一日志管理

    TIPS

    本文基于JDK 11编写,理论适用于JDK 9及更高版本。

    可使用-Xlog选项,启用统一日志管理。

    Xlog选项支持的参数如下:

    • -Xlog:使用info级别启用JVM日志

    • -Xlog:help:打印Xlog帮助文档

    • -Xlog:disable:关闭所有日志记录并清除日志记录框架的所有配置,包括警告和错误的默认配置

    • -Xlog[:option]:按照命令行上出现的顺序应用多个参数。同一输出的多个参数按其给定顺序覆盖。option的格式为:

      [:[what][:[output][:[decorators][:output-options[,...]]]]]
      
      • 1

      其中:

      • what:指定level和tag的组合,格式:tag1[+tag2...][*][=level][,...] 。除非用 * 指定了通配符,否则只有匹配了指定tag的日志消息才会被匹配。

      • output:设置输出类型。默认为stdout。

      • decorators:使用一系列自定义的装饰器去配置output。缺省的装饰器为uptime、level和tags。

      • output-options:设置Xlog的日志输出选项,格式:

        filecount=file-count filesize=file size with optional K, M or G suffix
        
        • 1

    默认配置

    如果只指定了 -Xlog ,则使用默认配置,等价于如下配置:

    -Xlog:all=warning:stdout:uptime,level,tags
    
    • 1

    在运行时控制日志

    可用jcmd的 VM.log 诊断命令在运行时控制日志记录。例如:

    jcmd 48758 VM.log output what
    
    • 1

    -Xlog标签和级别

    每个日志消息都有一个级别和与之关联的tag集合。消息的级别与其详细信息相对应,tag集与消息包含的内容或者消息所涉及的JVM组件(例如GC、编译器或线程)相对应。

    可用的日志级别:

    • off
    • trace
    • debug
    • info
    • warning
    • error

    可用的日志标签( 如指定为all,则表示下面所有标签的组合):

    • add
    • age
    • alloc
    • annotation
    • aot
    • arguments
    • attach
    • barrier
    • biasedlocking
    • blocks
    • bot
    • breakpoint
    • bytecode
    • census
    • class
    • classhisto
    • cleanup
    • compaction
    • comparator
    • constraints
    • constantpool
    • coops
    • cpu
    • cset
    • data
    • defaultmethods
    • dump
    • ergo
    • event
    • exceptions
    • exit
    • fingerprint
    • freelist
    • gc
    • hashtables
    • heap
    • humongous
    • ihop
    • iklass
    • init
    • itables
    • jfr
    • jni
    • jvmti
    • liveness
    • load
    • loader
    • logging
    • mark
    • marking
    • metadata
    • metaspace
    • method
    • mmu
    • modules
    • monitorinflation
    • monitormismatch
    • nmethod
    • normalize
    • objecttagging
    • obsolete
    • oopmap
    • os
    • pagesize
    • parser
    • patch
    • path
    • phases
    • plab
    • preorder
    • promotion
    • protectiondomain
    • purge
    • redefine
    • ref
    • refine
    • region
    • remset
    • resolve
    • safepoint
    • scavenge
    • scrub
    • setting
    • stackmap
    • stacktrace
    • stackwalk
    • start
    • startuptime
    • state
    • stats
    • stringdedup
    • stringtable
    • subclass
    • survivor
    • sweep
    • system
    • task
    • thread
    • time
    • timer
    • tlab
    • unload
    • update
    • verification
    • verify
    • vmoperation
    • vtables
    • workgang

    下表描述了标签和级别的组合:

    日志标签描述
    -Xlog:gc打印 gc信息以及垃圾回收发生的时间。
    -Xlog:gc*打印至少包含 gc标签的日志消息。它还可以具有与其关联的其他标签。但是,它不会提供phase级别信息。
    -Xlog:gc*=trace打印trace级别及更高的gc日志记录信息。输出显示所有gc相关标签以及详细的日志记录信息。
    -Xlog:gc+phases=debug打印不同的phase级别信息。这提供了在debug级别记录的详细信息级别。
    -Xlog:gc+heap=debug在gc之前和之后打印堆的使用详细。这将会以debug级别打印带有tag和heap的标记的日志
    -Xlog:safepoint在同一级别上打印有关应用并发时间(application concurrent time)和停顿时间(application stop time)的详细信息。
    -Xlog:gc+ergo*=tracetrace级别同时打印gcergo消息的组合。该信息包括有关堆大小和收集集构造的所有详细信息。
    -Xlog:gc+age=trace以trace级别 打印存活区的大小、以及存活对象在存活区的年龄分布
    -Xlog:gc*:file=::filecount=,filesize=将输出重定向到文件,在其中指定要使用的文件数和文件大小,单位 kb

    -Xlog输出

    -Xlog 支持以下类型的输出:

    • stdout :将输出发送到标准输出
    • stderr :将输出发送到stderr
    • file=filename :将输出发送到文本文件。你还可以让文件按照文件大小轮换,例如每记录10M就轮换,只保留5个文件等。默认情况下,最多保留5个20M的文件。可使用 filesize=10M, filecount=5 格式去指定文件大小和保留的文件数。

    装饰器

    装饰器用来装饰消息,记录与消息有关的信息。可以为每个输出配置一组自定义的装饰器,输出顺序和定义的顺序相同。缺省的装饰器为uptime、level和tags。none表示禁用所有的装饰器。

    下表展示了所有可用的装饰器:

    装饰器描述
    timeor tISO-8601格式的当前日期时间
    utctimeor utcUniversal Time Coordinated or Coordinated Universal Time.
    uptimeor uJVM启动了多久,以秒或毫秒为单位。例如6.567s.
    timemillisor tm相当于 System.currentTimeMillis()
    uptimemillisor umJVM启动以来的毫秒数
    timenanosor tn相当于 System.nanoTime()
    uptimenanosor unJVM启动以来的纳秒数
    hostnameor hn主机名
    pidor pThe process identifier.
    tidor ti打印线程号
    levelor l与日志消息关联的级别
    tags or tg与日志消息关联的标签集

    使用示例

    # 示例1:使用info级别记录所有信息到stdout,装饰器使用uptime、level及tags
    # 等价于-Xlog:all=info:stdout:uptime,levels,tags
    -Xlog
    
    # 示例2:以info级别打印使用了gc标签的日志到stdout
    -Xlog:gc
    
    # 示例3:使用默认装饰器,info级别,将使用gc或safepoint标签的消息记录到stdout。
    # 如果某个日志同时标签了gc及safepoint,不会被记录
    -Xlog:gc,safepoint
    
    # 示例4:使用默认装饰器,debug级别,打印同时带有gc和ref标签的日志。
    # 仅使用gc或ref的日志不会被记录
    -Xlog:gc+ref=debug
    
    # 示例5:不使用装饰器,使用debug级别,将带有gc标签的日志记录到gc.txt中
    -Xlog:gc=debug:file=gc.txt:none
    
    # 示例6:以trace级别记录所有带有gc标签的日志到gctrace.txt文件集中,该文件集中的文件最大1M,保留5个文件;使用的装饰器是uptimemillis、pids
    -Xlog:gc=trace:file=gctrace.txt:uptimemillis,pids:filecount=5,filesize=1024
    
    # 示例7:使用trace级别,记录至少带有gc及meta标签的日志到gcmetatrace.txt,同时关闭带有class的日志。某个消息如果同时带有gc、meta及class,将不会被记录,因为class标签被关闭了。
    -Xlog:gc+meta*=trace,class*=off:file=gcmetatrace.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    旧式GC日志和Xlog的对照

    旧式GC标记Xlog配置注释
    G1PrintHeapRegions-Xlog:gc+region=trace-
    GCLogFileSizeNo configuration available日志轮换由框架处理
    NumberOfGCLogFilesNot Applicable日志轮换由框架处理
    PrintAdaptiveSizePolicy-Xlog:gc+ergo*=level使用debug级别可打印大部分信息,使用trace级别可打印所有 PrintAdaptiveSizePolicy打印的信息
    PrintGC-Xlog:gc-
    PrintGCApplicationConcurrentTime-Xlog:safepoint注意: PrintGCApplicationConcurrentTimePrintGCApplicationStoppedTime是记录在同一tag之上的,并且没有被分开
    PrintGCApplicationStoppedTime-Xlog:safepoint注意: PrintGCApplicationConcurrentTimePrintGCApplicationStoppedTime是记录在同一tag之上的,并且没有被分开
    PrintGCCauseNot ApplicableXlog总是会记录GC cause
    PrintGCDateStampsNot Applicable日期戳由框架记录
    PrintGCDetails-Xlog:gc*-
    PrintGCIDNot ApplicableXlog总是会记录GC ID
    PrintGCTaskTimeStamps-Xlog:gc+task*=debug-
    PrintGCTimeStampsNot Applicable时间戳由框架记录
    PrintHeapAtGC-Xlog:gc+heap=trace-
    PrintReferenceGC-Xlog:gc+ref*=debug注意:旧式写法中,PrintGCDetails启用时, PrintReferenceGC才会生效
    PrintStringDeduplicationStatistics-Xlog:gc+stringdedup*=debug-
    PrintTenuringDistribution-Xlog:gc+age*=level使用debug日志级别记录最相关信息;trace级别记录所有 PrintTenuringDistribution会打印的信息。
    UseGCLogFileRotationNot Applicable用来记录 PrintTenuringDistribution

    旧式运行时日志和Xlog的对照

    旧式运行时标记Xlog配置注释
    TraceExceptions-Xlog:exceptions=info-
    TraceClassLoading-Xlog:class+load=level使用info级别记录常规信息,debug级别记录额外信息。在统一日志记录语法中, -verbose:class等价于 -Xlog:class+load=info,class+unload=info.
    TraceClassLoadingPreorder-Xlog:class+preorder=debug-
    TraceClassUnloading-Xlog:class+unload=level使用info级别记录常规信息,debug级别记录额外信息。在统一日志记录语法中, -verbose:class等价于 -Xlog:class+load=info,class+unload=info.
    VerboseVerification-Xlog:verification=info-
    TraceClassPaths-Xlog:class+path=info-
    TraceClassResolution-Xlog:class+resolve=debug-
    TraceClassInitialization-Xlog:class+init=info-
    TraceLoaderConstraints-Xlog:class+loader+constraints=info-
    TraceClassLoaderData-Xlog:class+loader+data=level使用info级别记录常规信息,debug级别记录额外信息。
    TraceSafepointCleanupTime-Xlog:safepoint+cleanup=info-
    TraceSafepoint-Xlog:safepoint=debug-
    TraceMonitorInflation-Xlog:monitorinflation=debug-
    TraceBiasedLocking-Xlog:biasedlocking=level使用info级别记录常规信息,debug级别记录额外信息。
    TraceRedefineClasses-Xlog:redefine+class*=level使用level=info,level=debug和level=trace提供越来越多的信息。

    参考文档

  • 相关阅读:
    Mybatis系列之 parameterMap 弃用了
    VSCODE+PHP8.2配置踩坑记录
    leetcode 75. 颜色分类
    2022 华为 Java 高级面试题及答案
    深入浅出Java多线程(四):线程状态
    Git Tortoise安装 CodeHub
    基于Scrapyd与Gerapy部署scrapy爬虫方案【可用于分布式爬虫部署】
    解决cmd命令行输入mysql提示不是内部或外部命令的错误
    C/C++ 中typedef 关键字的使用 (给类型起别名)
    linux 配置 NTP 服务器
  • 原文地址:https://blog.csdn.net/Little_fxc/article/details/125445092