14 Using the Centralized Logging Server

The centralized logging server is automatically installed with Oracle Communications Service Controller. The logging server collects each pn/ssu server's logs and output to a central place. Each pn/ssu server's logs is grouped by the pn/ssu servers's identity (IP:Port).

By default, the logging server folder is saved at the admin_server directory. You can start up the logging server there so that the logging server shares the same machine with the admin server. Or you can copy the logging server folder to other machine which works as a standalone logging server.

Installing the Logging Server

The logging server functionality is automatically installed when you install or upgrade Service Controller.

The logging server is installed in the admin_server directory. For example:

$ pwd
/ocsb62/ocsc/admin_server
$ ls
applications    clienttruststore  credentialStoreKey  host.sh     loggingserver

Configuring the Logging Server

./loggingserver/properties/loggingserver.properties
./loggingserver/log4j.xml
 
-------------------------------------------------------------
$ cat loggingserver.properties
# Logging server host, default: any/all local addresses
axia.loggingserver.host=
 
# Logging server port, default: 4560
axia.loggingserver.port=4560
 
# Logging server root log directory, default: current working directory/logs
axia.loggingserver.root.log.directory=logs
 
# Log4j configuration file
log4j.configuration=log4j2.xml
 
# Platform is server
axia.platform=server
 
#Aggregate logs into one file
axia.loggingserver.aggregate.logs=false
 
-------------------------------------------------------------
$ cat log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="AdminServer" packages="">
  <Appenders>
    <RollingRandomAccessFile name="DefaultFileAppender" fileName="logs/server.log" filePattern="logs/server.log.%i.gz"
      immediateFlush="false">
      <Policies>
        <CronTriggeringPolicy schedule="0 0 * * * ?"/>
        <SizeBasedTriggeringPolicy size="10 MB"/>
      </Policies>
    </RollingRandomAccessFile>
 
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout>
        <Pattern>%d %-5p %t %c{1} - %m%n</Pattern>
      </PatternLayout>
    </Console>
  </Appenders>
 
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="STDOUT"/>
    </Root>
 
    <Logger additivity="false" level="debug" name="DefaultServerLogger">
      <AppenderRef ref="DefaultFileAppender"/>
    </Logger>
  </Loggers>
 
</Configuration>

Note:

The Root log is used to print out the logging server's log itself. The Logger of 'DefaultServerLogger' and its referenced appender 'DefaultFileAppender' are used as the logger/appender template to create new logger/appenders when new pn/ssu is connected. The Logger of 'DefaultServerLogger' is also used as the default server logger to print out the received pn/ssu server log in case of no new logger/appenders created.

Starting the Logging Server

Run the logging server's start script:

$ ./loggingserver.sh

The console log for the logging server should look something like this:

2017-12-11 23:18:52,957 INFO  Start Level Event Dispatcher LoggingServer - Logging Server starting
2017-12-11 23:18:52,986 INFO  Start Level Event Dispatcher LoggingServerActivator - Logging Server started
2017-12-11 23:18:57,634 INFO  Thread-3 SocketServer - Accepted new log4j socket Socket[addr=/192.168.1.100,port=42838,localport=4560]
2017-12-11 23:18:57,750 INFO  Thread-3 SocketServer - Accepted new log4j socket Socket[addr=/192.168.1.100,port=42840,localport=4560]
2017-12-11 23:18:57,817 INFO  Thread-3 SocketServer - Accepted new log4j socket Socket[addr=/192.168.1.100,port=42842,localport=4560]

Configuring Managed Servers (pn/ssu)

Add the SocketAppender to pn/ssu domain configuration via axiaConsole (or JConsole):

PN/SSU axiaConsole -> Domain Configuration -> Configuration MBeans -> oracle.axia.logging.log4jconfig -> 6.2.0 -> log4jConfig -> Configuration[0] -> addAppenders

A new log4j2.xml will be generated for the pn/ssu managed server.

An example of the generated pn/ssu managed server's log4j2.xml looks like:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns:log4j="http://jakarta.apache.org/log4j/" >
    <Appenders>
        <Socket host="loggingserver" name="socket" port="4560"
            protocol="TCP" reconnectionDelayMillis="10000">
            <PatternLayout>
                <Pattern>%d %-5p %t %c{1} - %m%n</Pattern>
            </PatternLayout>
        </Socket>
    ...
    </Appenders>
    <Loggers>
        <Logger additivity="false" level="debug" name="oracle.axia.eventbroker">
            <AppenderRef ref="socket"/>
        </Logger>
     ...
    </Loggers>
</Configuration>

SocketAppender configuration notes:

  • The 'SocketAppender' is an 'OutputStreamAppender' that writes its output to a remote destination specified by a host and port. The data can be sent over either TCP or UDP and can be sent in any format.

  • The name string represents the name of the appender.

  • The host string represents the name or address of the system that is listening for log events. This parameter is required.

  • The port integer represents the port on the host that is listening for log events. This parameter must be specified.

  • The protocol string must be either TCP (default), UDP, or SSL.

  • For the reconnectionDelayMillis integer, if set to a value greater than 0, after an error the SocketManager will attempt to reconnect to the server after waiting the specified number of milliseconds.

    If the reconnect fails then an exception will be thrown (which can be caught by the application if ignoreExceptions is set to false).

Note:

The SocketAppender itself supports secure communication over SSL. But the logging server doesn't support SSL.

For the purpose of contrast, below is sample log4j output from the previous release of Service Controller (6.1):

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="null" threshold="null">
<appender class="org.apache.log4j.net.SocketAppender" name="socket">
<param name="RemoteHost" value="10.148.126.198"/>
<param name="Port" value="4560"/>
<param name="LocationInfo" value="true"/>
<param name="ReconnectionDelay" value="5000"/>
<param name="Application" value="testLogger"/>
<!--
<layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p %t %c{1} - %m%n"/>
        </layout>
-->
</appender>
<root>
<level value="debug"/>
<appender-ref ref="socket"/>
</root>
</log4j:configuration>

Starting the Managed Servers

To start the managed servers logging server clients, run the pn/ssu start script:

$ cd /ocsb62/ocsc/pn_1
$ ./start.sh pn_1 file:///domains/pn/initial.zip
 
$ cd /ocsb62/ocsc/ssu_1
$ ./start.sh ssu_1 file:///domains/pn/initial.zip

Collecting pn/ssu Server Logs with the Logging Server

After Service Controller pn/ssu server connects to the logging server, the logger server will output the received pn/ssu server log to the directory of loggingServer/logs. The pn/ssu server's logs will be grouped by the pn/ssu servers's identity.

Note:

ocsc6.2/log4j 2.10.0 only support pn/ssu server identify like IP:Port. No pn/ssu server's name (e.g. pn_1 ssu_1) can be passed to logging server.
$ pwd
/ocsb62/ocsc/admin_server/loggingserver/logs
$ ls
127.0.0.1:36097
10.0.0.1:3086
unknown
 
$ find 127.0.0.1:36097
127.0.0.1:36097
127.0.0.1:36097/logs
127.0.0.1:36097/logs/server.log