JDK 11统一日志管理

17 篇文章 0 订阅

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[,...]]]]]
    

    其中:

    • 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
      

默认配置

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

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

在运行时控制日志

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

jcmd 48758 VM.log output what

-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

旧式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提供越来越多的信息。

参考文档

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值