<?xml version="1.0" encoding="UTF-8"?>

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Log4J2 Configuration                                                 -->
<!--                                                                       -->
<!-- ===================================================================== -->


<Configuration monitorInterval="30" packages="com.pf.log4j.pattern,com.pf.log4j.layout,com.pf.log4j.appender" shutdownHook="disable">
    <Appenders>

        <!-- ============================== -->
        <!-- Append messages to the console -->
        <!-- ============================== -->

        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n" />
        </Console>

        <Console name="CONSOLE-ERROR" target="SYSTEM_ERR">
            <PatternLayout pattern="%d{ABSOLUTE} %-5p [%c{1}] %m%n" />
        </Console>

        <Console name="CONSOLE-PROVISIONER" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%d{ABSOLUTE} %-5p [%c{1}] %m %x %X{ChannelCode}%n" />
        </Console>

        <!-- ================================= -->
        <!-- Preserve messages in a local file -->
        <!-- ================================= -->

        <!-- Main log : A size based file rolling appender -->
        <RollingFile name="FILE" fileName="${sys:pf.log.dir}/server_${sys:HOSTNAME}.log"
            filePattern="${sys:pf.log.dir}/server_${sys:HOSTNAME}.log.%i" ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d %X{trackingid} %-5p [%c] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy
                    size="200000 KB" />
            </Policies>
            <DefaultRolloverStrategy max="50" />
        </RollingFile>

        <!-- Transaction log : A time/date based rolling appender -->
        <RollingFile name="Transaction" fileName="${sys:pf.log.dir}/transaction.log"
            filePattern="${sys:pf.log.dir}/transaction.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d %m%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>


       <RollingFile name="Audit" fileName="${sys:pf.log.dir}/audit/auth/audit_${env:HOSTNAME}.log"
            filePattern="${sys:pf.log.dir}/audit/auth/audit_${env:HOSTNAME}.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>"%d{yyyy-MM-dd HH:mm:ss}" %m%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
 
	<RollingFile name="SecurityAudit2Splunk" fileName="${sys:pf.log.dir}/splunk-audit.log"
            filePattern="${sys:pf.log.dir}/splunk-audit.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d event=%X{event} subject=&quot;%X{subject}&quot; ip=%X{ip} app=%X{app} connectionid=%X{connectionid} protocol=%X{protocol} pfhost=%X{host} role=%X{role} status=%X{status} adapterid=%X{adapterid} description=&quot;%X{description}&quot; responsetime=%X{responsetime} %n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <RollingFile name="SecurityAudit2File" fileName="${sys:pf.log.dir}/audit/auth/audit_${sys:HOSTNAME}.log"
            filePattern="${sys:pf.log.dir}/audit/auth/audit_${sys:HOSTNAME}.log.%d{yyyy-MM-dd}"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d|%X{event}| %X{subject}| %X{ip} | %X{app}| %X{connectionid}| %X{protocol}| %X{host}| %X{role}| %X{status}| %X{localuserid}| %X{attributes}| %X{trackingid}| %X{adapterid}| %X{pfversion}|  %X{description}| %X{assertionid}| %X{initiator}| %X{inmessagetype}| %X{inresponseto}| %X{inxmlmsg}| %X{outxmlmsg}| %X{requestid}| %X{responseid} %n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <!-- Admin Audit log : A time/date based rolling appender -->
        <RollingFile name="AdminAudit" fileName="${sys:pf.log.dir}/admin.log"
            filePattern="${sys:pf.log.dir}/admin.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d | %X{user} | %X{roles} | %X{ip} | %X{component} | %X{event} | %X{eventdetailid} | %m%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <!-- Admin Event Detail Audit log : A time/date based rolling appender -->
        <RollingFile name="AdminEventDetailAudit" fileName="${sys:pf.log.dir}/admin-event-detail.log"
            filePattern="${sys:pf.log.dir}/admin-event-detail.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%X{eventdetailid} | %X{filename} | %X{delta} | line %X{position} | %m%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <!-- Admin API Audit log : A time/date based rolling appender -->
        <RollingFile name="AdminApiAudit" fileName="${sys:pf.log.dir}/admin-api.log"
            filePattern="${sys:pf.log.dir}/admin-api.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d| %X{api.user}| %X{api.authtype}| %X{api.clientip}| %X{api.httpmethod}| %X{api.url}| %X{api.status} %n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <!-- Runtime API Audit log : A time/date based rolling appender -->
        <RollingFile name="RuntimeApiAudit" fileName="${sys:pf.log.dir}/runtime-api.log"
            filePattern="${sys:pf.log.dir}/runtime-api.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d| %X{api.user}| %X{api.authtype}| %X{api.clientip}| %X{api.httpmethod}| %X{api.url}| %X{api.status} %n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <!-- Provisioner log : A time/date based rolling appender -->
        <RollingFile name="ProvisionerLog" fileName="${sys:pf.log.dir}/provisioner.log"
            filePattern="${sys:pf.log.dir}/provisioner.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d{ABSOLUTE} %-5p [%c{1}] %m %x %X{ChannelCode}%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

        <!-- Outbound provisioner audit log: A time/date based rolling appender -->
        <RollingFile name="OutboundProvisionerEventToFile"
            fileName="${sys:pf.log.dir}/provisioner-audit.log"
            filePattern="${sys:pf.log.dir}/provisioner-audit.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d| %X{cycle_id}| %X{channel_id}| %X{event_type}| %X{source_id}| %X{target_id}| %X{is_success}| %X{non_success_cause} %n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>


        <RollingFile name="OutboundProvisionerEventToSplunk"
            fileName="${sys:pf.log.dir}/provisioner-audit-splunk.log"
            filePattern="${sys:pf.log.dir}/provisioner-audit-splunk.%d{yyyy-MM-dd}.log"
            ignoreExceptions="false">
            <PatternLayout>
                <pattern>%d| cycle_id=%X{cycle_id} channel_id=%X{channel_id} event_type=%X{event_type} source_id=%X{source_id} target_id=%X{target_id} is_success=%X{is_success} non_success_cause=&quot;%X{non_success_cause}&quot; %n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>

	<Socket name="Syslog" host="127.0.0.1" protocol="UDP" ignoreExceptions="false">
            <PingSyslogLayout>
                <PatternLayout>
                    <pattern>pf: "%d{yyyy-MM-dd HH:mm:ss}" %m%n</pattern>
                </PatternLayout>
            </PingSyslogLayout>
        </Socket>


    </Appenders>

    <Loggers>

        <!-- ================ -->
        <!-- Limit categories -->
        <!-- ================ -->

        <Logger name="httpclient.wire.content" level="INFO" />
        <Logger name="org.sourceid" level="DEBUG" />
        <Logger name="org.sourceid.custom20.util.SystemUtil" level="DEBUG" additivity="false">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="FILE" />
        </Logger>
        <Logger name="com.jolbox" level="OFF" />
        <Logger name="com.pf.crypto.CertificateServiceImpl" level="INFO" />
        <!-- Adjust the priority value to DEBUG to get additional logging to help troubleshoot XML Signature problems -->
        <Logger name="org.sourceid.common.dsig" level="INFO" />
        <Logger name="org.sourceid.custom20.domain.mgmt.impl.PluginSupport" level="INFO" />
        <Logger name="com.pf" level="DEBUG" />
        <Logger name="com.pf.common.util.ErrorHandler" level="DEBUG" additivity="false">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="FILE" />
        </Logger>        
        <Logger name="com.pf.appserver.jetty" level="INFO" />
        <!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
        <Logger name="org.apache" level="INFO" />
        <!-- Limit Jetty -->
        <Logger name="org.eclipse.jetty" level="INFO" />
        <Logger name="org.eclipse.jetty.io.nio" level="ERROR" />
        <Logger name="org.eclipse.jetty.jmx.ObjectMBean" level="ERROR" />
        <Logger name="org.eclipse.jetty.server.session" level="WARN" />
        <Logger name="org.apache.hivemind" level="INFO" />
        <!-- Limit the jgroups category -->
        <Logger name="org.jgroups" level="INFO" />
        <Logger name="com.pf.jgroups.org.jgroups" level="WARN" />
        <Logger name="com.pf.locale" level="INFO" />
        <Logger name="com.pf.sdk.locale" level="INFO" />
        <Logger name="org.apache.axis" level="INFO" />
        <Logger name="hsqldb.db" level="ERROR" />
        <Logger name="org.sourceid.websso.servlet.IntegrationControllerServlet" level="INFO" />
        <Logger name="org.sourceid.servlet.HttpServletRespProxy" level="INFO" />
        <Logger name="org.sourceid.custom20.bindings.BindingServiceImpl" level="INFO" />
        <Logger name="org.sourceid.common.IDGenerator" level="INFO" />
				<!-- Add for Signature Verification -->
        <Logger name="org.sourceid.common.IDGenerator" level="INFO" />
				<Logger name="com.custom.client.identity" level="INFO" />
 
        <!-- Freemarker caching --> 
               <Logger name="freemarker.cache" level="ERROR" />

        <!-- ================ -->
        <!-- Loggers -->
        <!-- ================ -->

        <AsyncLogger name="org.sourceid.custom20.bindings.BindingLogProxy"
            level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="Transaction" />
        </AsyncLogger>

        <Logger name="org.sourceid.websso.profiles.sp.SpAuditLogger"
            level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="SecurityAudit2File" />
        </Logger>


        <AsyncLogger name="com.pf.provisioner"
            level="DEBUG" additivity="false" includeLocation="false">
            <appender-ref ref="ProvisionerLog" />
            <appender-ref ref="CONSOLE-PROVISIONER" />
        </AsyncLogger>


        <Logger name="org.sourceid.websso.profiles.idp.IdpAuditLogger"
            level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="SecurityAudit2File" />
        </Logger>


        <Logger name="org.sourceid.websso.profiles.idp.AsAuditLogger"
            level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="SecurityAudit2File" />
        </Logger>

        <Logger name="org.sourceid.wstrust.log.STSAuditLogger"
            level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="SecurityAudit2File" />
        </Logger>

        <Logger name="AuditLogger" level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="AdminAudit" />
        </Logger>

        <Logger name="EventDetailAuditLogger" level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="AdminEventDetailAudit" />
        </Logger>

        <Logger name="AdminApiAuditLogger" level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="AdminApiAudit" />
        </Logger>

        <Logger name="RuntimeApiAuditLogger" level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="RuntimeApiAudit" />
        </Logger>

	  <!-- Set up Custom Logger -->
	<Logger name="com.prod" level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="FILE" />
        </Logger>
 
        <Logger name="freemarker" level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="FILE" />
        </Logger>
 
        <AsyncLogger name="eventLogger" level="INFO" additivity="true" includeLocation="false">
       		<appender-ref ref="ArgusAudit"/>           
        </AsyncLogger>

        <Logger name="ProvisionerAuditLogger" level="INFO" additivity="false" includeLocation="false">
            <appender-ref ref="OutboundProvisionerEventToFile" />
        </Logger>

        <AsyncRoot level="INFO" includeLocation="false">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="FILE" />
        </AsyncRoot>

    </Loggers>

</Configuration>
