2016-05-23 14 views
1

wsadminを使用してWebsphereサーバーのログを取得しようとしています。 NDに接続すると、SSHアクセスがないリモートノードからログを取得する必要があるかもしれません。wsadminを使用してWebsphere JVMログを取得します。

管理コンソールを使用してログを表示できるので、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

これは単一のサーバーで機能しますが、複数のサーバーと構成に対して簡単に編集できます。

これは、ログパスを探して、その内容を読み込むための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() 
関連する問題