使用 wsadmin 检索 Websphere JVM 日志

Retrieve Websphere JVM logs using wsadmin

我正在尝试通过 wsadmin 检索 Websphere 服务器日志。当连接到 ND 时,我可能必须从我没有 SSH 访问权限的远程节点检索日志。

因为我可以使用管理控制台查看日志,所以我想知道是否可以使用 wsadmin 检索日志。

我已经做到了以下几点:

    s1 = AdminConfig.getid('/Node:'+nodeName+'/Server:'+serverName)
    log = AdminConfig.showAttribute(s1, 'outputStreamRedirect')

对于每个服务器,这将打印如下内容:

[baseHour 24]
[fileName ${SERVER_LOG_ROOT}/SystemOut.log]
[formatWrites true]
[maxNumberOfBackupFiles 5]
[messageFormatKind BASIC]
[rolloverPeriod 24]
[rolloverSize 1]
[rolloverType SIZE]
[suppressStackTrace false]
[suppressWrites false]
[baseHour 24]
[fileName ${SERVER_LOG_ROOT}/SystemErr.log]
[formatWrites true]
[maxNumberOfBackupFiles 5]
[messageFormatKind BASIC]
[rolloverPeriod 24]
[rolloverSize 1]
[rolloverType SIZE]
[suppressStackTrace false]
[suppressWrites false]

wsadmin 中是否有任何对象可以帮助我检索该 fileName 属性的内容?

这适用于单个服务器,但很容易针对多个服务器和配置进行编辑。

它定位日志路径,发送一个ant job加载它的内容,然后获取ant日志。

解析文件以仅获取日志应该很容易。

from java.lang import String
import jarray

serverName = sys.argv[0]
s1 = AdminConfig.getid('/Server:'+serverName)
log = AdminConfig.showAttribute(s1, 'outputStreamRedirect')
errLog = AdminConfig.showAttribute(s1, 'errorStreamRedirect')
adminOperations = AdminControl.queryNames('WebSphere:*,type=AdminOperations,process='+serverName).splitlines()[0]
sysOutLogPath = AdminControl.invoke(adminOperations, 'expandVariable', [AdminConfig.showAttribute(log, 'fileName')])
#sysErrLogPath = AdminControl.invoke(adminOperations, 'expandVariable', [AdminConfig.showAttribute(errLog, 'fileName')])
fileContent_outLog = '<project name="printLog" default="printLog"><target name="printLog"><loadfile property="logContents" srcFile="'+sysOutLogPath+'"/></target></project>'
str = String(fileContent_outLog)
bytes = str.getBytes()
antAgent = AdminControl.makeObjectName(AdminControl.queryNames('WebSphere:*,type=AntAgent,process='+serverName))
AdminControl.invoke_jmx(antAgent, 'putScript', [String('printLog.xml'),bytes], jarray.array(['java.lang.String', '[B'], String))
AdminControl.invoke_jmx(antAgent, 'invokeAnt', [jarray.array([], String), String('printLog.xml'), String('printLog')], jarray.array(['[Ljava.lang.String;', 'java.lang.String', 'java.lang.String'], String))
logBytes = AdminControl.invoke_jmx(antAgent, 'getLastLog', [],jarray.array([],  String))
tempFile = open('./'+serverName+'.SystemOut.log','w')
tempFile.write(String(logBytes))
tempFile.close()