使用wsadmin检索Websphere JVM日志

时间:2016-05-23 23:36:23

标签: logging jvm websphere jython 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属性的内容?

1 个答案:

答案 0 :(得分:1)

这适用于单个服务器,但可以轻松编辑多个服务器和配置。

它找到日志路径,并发送一个ant作业来加载其内容,然后获取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()