ログファイルの内容は現在 CIM Workshop で表示できますが、独自の方法でログファイルを表示したい場合はロギング API を使用してログビューアを開発できます。この API を使用すると、アプリケーションからログファイルへのデータの書き込み、またはログファイルからログビューアへのデータの読み込みが行えます。
アプリケーションでデータをログファイルに書き込むには、次の作業を行います。
Solaris_LogRecord クラスの新しいインスタンスを作成する
ログファイルに書き込まれるプロパティを設定し、プロパティの修飾子の値を設定する
出力する新しいインスタンスとプロパティを設定する
必要なすべての java.rmi クラスをインポートします。
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import com.sun.wbem.cim.CIMException; import com.sun.wbem.solarisprovider.*; import java.util.*; import java.util.Enumeration; |
CIMClient の値
CIMObjectPath の値
CIMNameSpace の値
public class CreateLog {
public static void main(String args[ ]) throws CIMException {
if ( args.length != 3) {
System.out.println("Usage: CreateLog host username password");
System.exit(1);
}
CIMClient cc = null;
CIMObjectPath cop = null;
try {
CIMNameSpace cns = new CIMNameSpace(args[0]);
cc = new CIMClient(cns, args[1], args[2]);
|
プロパティのベクトルが返されるように指定します。修飾子のプロパティに値を設定します。
Vector keys = new Vector();
CIMProperty logsvcKey = new CIMProperty("RecordID");
logsvcKey.setValue(new CIMValue(new Integer(0)));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("RecordHashCode");
logsvcKey.setValue(new CIMValue(new Integer(0)));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("Filename");
logsvcKey.setValue(new CIMValue("some_file"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("category");
logsvcKey.setValue(new CIMValue(new Integer(2)));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("severity");
logsvcKey.setValue(new CIMValue(new Integer(2)));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("AppName");
logsvcKey.setValue(new CIMValue("SomeApp"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("UserName");
logsvcKey.setValue(new CIMValue("molly"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("ClientMachineName");
logsvcKey.setValue(new CIMValue("dragonfly"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("ServerMachineName");
logsvcKey.setValue(new CIMValue("spider"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("SummaryMessage");
logsvcKey.setValue(new CIMValue("brief_description"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("DetailedMessage");
logsvcKey.setValue(new CIMValue("detailed_description"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("data");
logsvcKey.setValue(new CIMValue("0xfe 0x45 0xae 0xda"));
keys.addElement(logsvcKey);
logsvcKey = new CIMProperty("SyslogFlag");
logsvcKey.setValue(new CIMValue(new Boolean(true)));
keys.addElement(logsvcKey);
|
ログ記録用に CIMObjectPath の新しいインスタンスを宣言します。
CIMObjectPath logreccop = new CIMObjectPath("Solaris_LogRecord", keys);
|
Solaris_LogRecord の新しいインスタンスを宣言します。ファイルに書き込むようにプロパティのベクトルを設定します。
CIMInstance ci = new CIMInstance();
ci.setClassName("Solaris_LogRecord");
ci.setProperties(keys);
//System.out.println(ci.toString());
cc.setInstance(logreccop,ci);
}
catch (Exception e) {
System.out.println("Exception: "+e);
e.printStackTrace();
}
|
データがログファイルに書き込まれたあと、セッションを閉じます。
// セッションを閉じる
if(cc != null) {
cc.close();
}
}
}
|
アプリケーションでログファイルからログビューアにデータを読み込むには、次の作業を行います
Solaris_LogRecord クラスのインスタンスを列挙する
目的のインスタンスを取得する
出力デバイス (通常はユーザーインタフェース) にインスタンスのプロパティを出力する
必要なすべての java.rmi クラスをインポートします。
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import com.sun.wbem.cim.CIMException; import com.sun.wbem.solarisprovider.*; import java.util.*; import java.util.Enumeration; |
クラス ReadLog を宣言します。
public class ReadLog
{
public static void main(String args[]) throws
CIMException
{
if ( args.length != 3)
{
System.out.println("Usage: ReadLog host username
password");
System.exit(1);
|
ReadLog クラスのクライアント、オブジェクトパス、およびネームスペースの値を設定します。
}
CIMClient cc = null;
CIMObjectPath cop = null;
try { CIMNameSpace cns = new CIMNameSpace(args[0]);
cc = new CIMClient(cns, args[1], args[2]);
cop = new CIMObjectPath("Solaris_LogRecord");
|
Solaris_LogRecord のインスタンスを列挙します。
Enumeration e = cc.enumInstances(cop, true);
for (; e.hasMoreElements(); ) {
|
プロパティの値を出力デバイスに送ります。
System.out.println("------------------------
---------");
CIMObjectPath op = (CIMObjectPath)e.nextElement();
CIMInstance ci = cc.getInstance(op);
System.out.println("Record ID : " +
(((Long)ci.getProperty("RecordID").getValue().
getValue()).longValue()));
System.out.println("Log filename : " +
((String)ci.getProperty("FileName").getValue().
getValue()));
int categ = (((Integer)ci.getProperty("category").
getValue().getValue()).intValue());
if (categ == 0)
System.out.println("Category : Application Log");
else if (categ == 1)
System.out.println("Category : Security Log");
else if (categ == 2)
System.out.println("Category : System Log");
int severity = (((Integer)ci.getProperty
("severity").getValue().getValue()).intValue());
if (severity == 0)
System.out.println("Severity : Informational");
else if (severity == 1)
System.out.println("Severity : Warning Log!");
else if (severity == 2)
System.out.println("Severity : Error!!");
System.out.println("Log Record written by :" +
((String)ci.getProperty("AppName").getValue().
getValue()));
System.out.println("User : " + ((String)ci.
getProperty("UserName").getValue().getValue()));
System.out.println("Client Machine : " + ((String)ci.
getProperty("ClientMachineName").getValue().getValue
()));
System.out.println("Server Machine : " + ((String)ci.
getProperty("ServerMachineName").getValue().getValue
()));
System.out.println("Summary Message : " + ((String)
ci.getProperty("SummaryMessage").getValue().getValue
()));
System.out.println("Detailed Message : " + ((String)
ci.getProperty("DetailedMessage").getValue().getValue
()));
System.out.println("Additional data : " + ((String)
ci.getProperty("data").getValue().getValue()));
boolean syslogflag =
((Boolean)ci.getProperty("syslogflag").getValue().
getValue()).booleanValue();
if (syslogflag == true) {
System.out.println("Record was written to syslog as
well");
} else {
System.out.println("Record was not written to
syslog");
}
System.out.println("-----------------------------
----");
}
|
エラー状況が発生する場合は、ユーザーにエラーメッセージを返します。
}
catch (Exception e) {
System.out.println("Exception: "+e);
e.printStackTrace();
}
|
ファイルからデータが読み取られたあとセッションを閉じます。
// セッションを閉じる。
if(cc != null) {
cc.close();
}
}
}
|