The Solaris platform MOF files include logging classes. Clients can create and read log records using these classes to record errors, warnings, and informational messages. For example, a log message can indicate one of the following conditions:
A system cannot access a serial port
A system successfully mounts a file system
The number of processes that are running on a system exceeds the allowed number
The underlying providers for the logging classes can forward logging requests to the syslog daemon, the default logging system in the Solaris OS. See thesyslogd(1M) man page for more information.
WBEM log messages are stored in individual log files in the /var/sadm/wbem/log directory. Properties that you manipulate with the singleton instance of the Solaris_LogServiceProperties class:
Names of the log files
Directory in which the log files are stored
Log file size limit
Number of log files to store
Whether to forward messages to syslogd(1M)
The format of each log entry is defined by the Solaris_LogEntry class, which is a subclass of CIM_LogRecord. You can find Solaris_LogEntry in Solaris_Device.mof, and CIM_LogRecord in CIM_Device26.mof.
A log message includes the following elements:
Table 4–8 Log Message Elements
Element |
Description |
---|---|
Category |
Type of message – application, system, or security |
Severity |
Severity of the condition – warning or error |
Application |
Name of the application or the provider that is writing the log message |
User |
Name of the user who was using the application when the log message was generated |
Client Machine |
Name and IP address of the system that the user was on when the log message was generated |
Server Machine |
Name of the system on which the incident that generated the log message occurred |
Summary Message |
Descriptive summary of the incident |
Detailed Message |
Detailed description of the incident |
Data |
Contextual information that provides a better understanding of the incident |
SyslogFlag |
Boolean flag that specifies whether to send the message to syslogd(1M) |
The following examples show how to create a log and how to display the contents of a log.
This example creates an instance of Solaris_LogEntry and sets the instance.
public class CreateLog { public static void main(String args[]) throws CIMException { // Display usage statement if insufficient command line // arguments are passed. if (args.length < 3) { System.out.println("Usage: CreateLog host username password " + "[rmi|http]"); System.exit(1); } String protocol = CIMClient.CIM_RMI; CIMClient cc = null; CIMObjectPath cop = null; BufferedReader d = new BufferedReader(new InputStreamReader (System.in)); String input_line = ""; // Query user for number of records that need to be created. System.out.print("How many log records do you want to write? "); int num_recs = 0; try { num_recs = Integer.parseInt(d.readLine()); } catch (Exception ex) { ex.printStackTrace(); System.exit(1); } // Over-arching try-catch block try { CIMNameSpace cns = new CIMNameSpace(args[0]); UserPrincipal up = new UserPrincipal(args[1]); PasswordCredential pc = new PasswordCredential(args[2]); // Set up the transport protocol - set by default to RMI. if (args.length == 4 && args[3].equalsIgnoreCase("http")) { protocol = CIMClient.CIM_XML; } cc = new CIMClient(cns, up, pc, protocol); Vector keys = new Vector(); CIMProperty logsvcKey = null; // Prompt user for relevant info needed to create the // log record. System.out.println("Please enter the record Category: "); System.out.println("\t(0)application, (1)security, (2)system"); logsvcKey = new CIMProperty("category"); input_line = d.readLine(); logsvcKey.setValue(new CIMValue(Integer.valueOf (input_line))); keys.addElement(logsvcKey); System.out.println("Please enter the record Severity:"); System.out.println("\t(0)Informational, (1)Warning, (2)Error"); logsvcKey = new CIMProperty("severity"); input_line = d.readLine(); logsvcKey.setValue(new CIMValue(Integer.valueOf (input_line))); keys.addElement(logsvcKey); logsvcKey = new CIMProperty("Source"); System.out.println("Please enter Application Name:"); logsvcKey.setValue(new CIMValue(d.readLine())); keys.addElement(logsvcKey); logsvcKey = new CIMProperty("SummaryMessage"); System.out.println("Please enter a summary message:"); logsvcKey.setValue(new CIMValue(d.readLine())); keys.addElement(logsvcKey); logsvcKey = new CIMProperty("DetailedMessage"); System.out.println("Please enter a detailed message:"); logsvcKey.setValue(new CIMValue(d.readLine())); keys.addElement(logsvcKey); logsvcKey = new CIMProperty("RecordData"); logsvcKey.setValue( new CIMValue("0xfe 0x45 0xae 0xda random data")); keys.addElement(logsvcKey); logsvcKey = new CIMProperty("SyslogFlag"); logsvcKey.setValue(new CIMValue(new Boolean(true))); keys.addElement(logsvcKey); CIMObjectPath logreccop = new CIMObjectPath("Solaris_LogEntry", keys); CIMClass logClass = cc.getClass(logreccop); CIMInstance ci = logClass.newInstance(); ci.setClassName("Solaris_LogEntry"); ci.setProperties(keys); // System.out.println(ci.toString()); // Create as many instances of the record as requested. for (int i = 0; i < num_recs; i++) { cc.createInstance(logreccop, ci); } } catch (Exception e) { System.out.println("Exception: "+e); e.printStackTrace(); } // close session. if (cc != null) { cc.close(); } } }
This example displays a list of log records.
public class ReadLog { public static void main(String args[]) throws CIMException { String protocol = CIMClient.CIM_RMI; // Display usage statement if insufficient command line // arguments are passed. if (args.length < 3) { System.out.println("Usage: ReadLog host username password " + "[rmi|http]"); System.exit(1); } CIMClient cc = null; CIMObjectPath cop = null; CIMObjectPath serviceObjPath = null; Vector inVec = new Vector(); Vector outVec = new Vector(); // Over-arching try-catch block try { CIMNameSpace cns = new CIMNameSpace(args[0]); UserPrincipal up = new UserPrincipal(args[1]); PasswordCredential pc = new PasswordCredential(args[2]); // Set up the transport protocol - set by default to RMI. if (args.length == 4 && args[3].equalsIgnoreCase("http")) { protocol = CIMClient.CIM_XML; } cc = new CIMClient(cns, up, pc, protocol); cop = new CIMObjectPath("Solaris_LogEntry"); // Enumerate the list of instances of class Solaris_LogEntry Enumeration e = cc.enumerateInstances(cop, true, false, false, false, null); // iterate over the list and print out each property. for (; e.hasMoreElements(); ) { System.out.println("---------------------------------"); CIMInstance ci = (CIMInstance)e.nextElement(); System.out.println("Log filename : " + ((String)ci.getProperty("LogName").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("Source").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("RecordData").getValue().getValue())); boolean syslogflag = ((Boolean)ci.getProperty("SyslogFlag").getValue().getValue()). booleanValue(); if (syslogflag == true) { System.out.println("Record was written to syslog"); } else { System.out.println("Record was not written to syslog"); } System.out.println("---------------------------------"); } } catch (Exception e) { System.out.println("Exception: "+e); e.printStackTrace(); } // close session. if (cc != null) { cc.close(); } } }