ログファイルの内容を、Solaris Management Console (SMC) ログビューアで参照することができます。Solaris Management Console についての詳細は、smc(1M) のマニュアルページを参照してください。
ログファイルをカスタマイズした方法で参照したい場合は、独自のログビューアを開発することもできます。WBEM ロギング API を使用して、次のことを行うロギングプログラムを開発することができます:
アプリケーションからログファイルへデータを書き込む
ログファイルから開発したログビューアへデータを読み込む
ロギングをどのように扱うかを指定するロギングプロパティを設定する
アプリケーションでデータをログファイルに書き込むには、次の作業を行います。
Solaris_LogRecord クラスの新しいインスタンスを作成する
ログファイルに書き込まれるプロパティを設定し、プロパティの修飾子の値を設定する
出力する新しいインスタンスとプロパティを設定する
必要なすべての java クラスをインポートします。以下に示すクラスは必要な最小限のクラスです。
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.*; |
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; 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 クラスをインポートします。以下にリストされているクラスは、必要な最小限のクラスです。
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、CIMObjectPath、および CIMNameSpace の値を設定します。
} 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(); } } } |
Solaris_LogServiceProperties クラスのインスタンスを作成し、そのインスタンスのプロパティ値を設定すれば、アプリケーションやプロバイダでロギングをどのように扱うかを制御できます。次の例は、ロギングプロパティの設定方法を示したものです。プロパティは、/usr/sadm/lib/wbem/WbemServices.properties ファイルに格納されます。
public class SetProps { public static void main(String args[]) throws CIMException { if ( args.length != 3) { System.out.println("Usage: SetProps host username password"); System.exit(1); } CIMClient cc = null; try { CIMNameSpace cns = new CIMNameSpace(args[0]); cc = new CIMClient(cns, args[1], args[2]); CIMObjectPath logpropcop = new CIMObjectPath("Solaris_Log ServiceProperties"); Enumeration e = cc.enumInstances(logpropcop, true); for (; e.hasMoreElements(); ) { CIMObjectPath op = (CIMObjectPath)e.nextElement(); CIMInstance ci = cc.getInstance(op); ci.setProperty("Directory", new CIMValue("/tmp/bar1/")); ci.setProperty("FileSize", new CIMValue("10")); ci.setProperty("NumFiles", new CIMValue("2")); ci.setProperty("SyslogSwitch", new CIMValue("off")); cc.setInstance(logpropcop,ci); } } catch (Exception e) { System.out.println("Exception: "+e); e.printStackTrace(); } // close session. if(cc != null) { cc.close(); } } |