<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
    <Console name="CONSOLE" target="SYSTEM_OUT">
        <LogStashJSONLayoutPega/>
    </Console>
    <RollingRandomAccessFile  name="PEGA" fileName="${sys:pega.logdir}/PegaRULES.log" filePattern="${sys:pega.logdir}/PegaRULES-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%d [%20.20t] [%10.10X{pegathread}] [%20.20X{tenantid}] {{ if eq .Env.PEGA_LOG_CORRELATION_ID_ENABLED "true" }}[%X{ext-correlation-id}] [%X{int-correlation-id}] {{ end }}[%20.20X{app}] (%30.30c{3}) %-5p %X{stack} %X{RequestorId} %X{userid} - %m%n</Pattern>
        </PatternLayout>
        <Filters>
            <!--Deny message logged under ALERT log level-->
            <ThresholdFilter level="ALERT" onMatch="DENY" onMismatch="NEUTRAL"/>
        </Filters>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
        <DefaultRolloverStrategy max="20"/>
    </RollingRandomAccessFile>
    <!-- RollingFile Appender for pegarules PERFORMANCE Alert logs -->
    <RollingRandomAccessFile  name="ALERT" fileName="${sys:pega.logdir}/PegaRULES-ALERT.log" filePattern="${sys:pega.logdir}/PegaRULES-ALERT-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%m%n</Pattern>
        </PatternLayout>
        <ThreadContextMapFilter onMatch="DENY" onMismatch="NEUTRAL" operator="or">
            <KeyValuePair key="alertType" value="security"/>
        </ThreadContextMapFilter>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingRandomAccessFile>
    <!-- RollingFile Appender for PegaRULES-ALERTSECURITY logs -->
    <RollingRandomAccessFile name="ALERTSECURITY" fileName="${sys:pega.logdir}/PegaRULES-ALERTSECURITY.log" filePattern="${sys:pega.logdir}/PegaRULES-ALERTSECURITY-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%m%n</Pattern>
        </PatternLayout>
        <ThreadContextMapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or">
            <KeyValuePair key="alertType" value="security"/>
        </ThreadContextMapFilter>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingRandomAccessFile>
    <!-- RollingFile Appender for PegaBIX logs -->
    <RollingRandomAccessFile  name="BIX" fileName="${sys:pega.logdir}/PegaBIX.log" filePattern="${sys:pega.logdir}/PegaBIX-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%d [%20.20t] [%20.20X{tenantid}] [%20.20X{app}] (%30.30c{3}) %-5p %X{stack} %X{userid} - %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingRandomAccessFile>
    <!-- RollingFile Appender for PegaRULES-SecurityEvent logs -->
    <RollingRandomAccessFile  name="SECURITYEVENT" fileName="${sys:pega.logdir}/PegaRULES-SecurityEvent.log" filePattern="${sys:pega.logdir}/PegaRULES-SecurityEvent-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingRandomAccessFile>
    <!-- RollingFile Appender for PegaCLUSTER logs -->
    <RollingRandomAccessFile  name="CLUSTER" fileName="${sys:pega.logdir}/PegaCLUSTER.log" filePattern="${sys:pega.logdir}/PegaCLUSTER-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%d [%20.20t] [%20.20X{tenantid}] [%20.20X{app}] (%30.30c{3}) %-5p %X{stack} %X{RequestorId} %X{userid} - %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="50 MB"/>
        </Policies>
    </RollingRandomAccessFile>

    <!-- RollingFile Appender for PegaDATAFLOW logs -->
    <RollingRandomAccessFile  name="DATAFLOW" fileName="${sys:pega.logdir}/PegaDATAFLOW.log" filePattern="${sys:pega.logdir}/PegaDATAFLOW-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%d (%30.30c{3}) %-5p - %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="50 MB"/>
        </Policies>
    </RollingRandomAccessFile>

    <!-- RollingFile Appender for PegaDDSMetrics logs -->
    <RollingRandomAccessFile name="DDSMETRICS" fileName="${sys:pega.logdir}/PegaDDSMetrics.log"
                             filePattern="${sys:pega.logdir}/PegaDDSMetrics-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%d (%30.30c{3}) %-5p - %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="50 MB"/>
        </Policies>
    </RollingRandomAccessFile>

    <!-- RollingFile Appender for PegaMOBILE logs -->
    <RollingRandomAccessFile name="MOBILE" fileName="${sys:pega.logdir}/PegaMOBILE.log" filePattern="${sys:pega.logdir}/PegaMOBILE-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingRandomAccessFile>

    <!-- RollingFile Appender for PegaMOBILEBUILD logs -->
    <RollingRandomAccessFile name="MOBILEBUILD" fileName="${sys:pega.logdir}/PegaMOBILEBUILD.log" filePattern="${sys:pega.logdir}/PegaMOBILEBUILD-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <Pattern>%m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingRandomAccessFile>

    <!-- RollingFile Appender for USAGEMETRICS logs -->
    <!-- Added for Usage Metrics -->
    <RollingRandomAccessFile  name="USAGEMETRICS" fileName="${sys:pega.logdir}/PegaUSAGE.json.log" filePattern="${sys:pega.logdir}/PegaUSAGE-%d{yyyy-MM-dd-HH}-%i.log.gz">
        <PatternLayout>
            <Pattern>%m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            <SizeBasedTriggeringPolicy size="20 MB"/>
        </Policies>
        <DefaultRolloverStrategy max="15"/>
    </RollingRandomAccessFile>
</Appenders>
<Loggers>
    <asyncRoot>
        <AppenderRef ref="CONSOLE"/>
        <AppenderRef ref="PEGA"/>
        <AppenderRef ref="JSONAppender" />
        <AppenderRef ref="ALERT" level="ALERT"/>
        <AppenderRef ref="ALERTSECURITY" level="ALERT"/>
    </asyncRoot>
    <Logger name="com.pega.pegarules.session.internal.mgmt.SecurityEventLogger" additivity="true" level="info">
        <AppenderRef ref="SECURITYEVENT"/>
    </Logger>
    <Logger name="com.pega.pegarules.data.internal.access.ExtractImpl" additivity="true" level="info">
        <AppenderRef ref="BIX"/>
    </Logger>
    <Logger name="com.pega.pegarules.data.internal.access.ExtractParameters" additivity="true" level="info">
        <AppenderRef ref="BIX"/>
    </Logger>
    <Logger name="com.pega.pegarules.data.internal.access.DatabaseUtilsCommonImpl" additivity="true" level="info">
        <AppenderRef ref="BIX"/>
    </Logger>
    <Logger name="com.hazelcast" additivity="true" level="info">
        <AppenderRef ref="CLUSTER"/>
    </Logger>
    <Logger name="com.pega.hazelcast" additivity="true" level="info">
        <AppenderRef ref="CLUSTER"/>
    </Logger>
    <Logger name="org.apache.ignite" additivity="true" level="info">
        <AppenderRef ref="CLUSTER"/>
    </Logger>
    <Logger name="com.pega.MobileLogger" additivity="true" level="info">
        <AppenderRef ref="MOBILE"/>
    </Logger>
    <Logger name="com.pega.MobileBuildLogger" additivity="true" level="info">
        <AppenderRef ref="MOBILEBUILD"/>
    </Logger>
    <Logger name="com.pega.dsm.dnode.impl.dataflow.service.DataFlowDiagnosticsFileLogger" additivity="true" level="info">
        <AppenderRef ref="DATAFLOW"/>
    </Logger>
    <Logger name="com.pega.platform.service.dds.client.metrics.reporters.DdsMetricsLogger" additivity="true" level="info">
        <AppenderRef ref="DDSMETRICS"/>
    </Logger>
    <!-- Added for Usage Metrics -->
    <AsyncLogger name="com.pega.pegarules.session.internal.usagemetrics" additivity="true" level="info">
        <AppenderRef ref="USAGEMETRICS"/>
    </AsyncLogger>
</Loggers>
</Configuration>
