deepakguna
deepakguna

Reputation: 175

Adding a filename to log4j2 logger

I am specifying the filename to log4j2 logger in the XML as below. All works fine but i get the error

2017-09-06 16:54:33,496 main ERROR Unknown object "RandomAccessFile" of type org.apache.logging.log4j.core.appender.RandomAccessFileAppender is ignored: try nesting it inside one of: ["Appenders", "Loggers", "Properties", "Scripts", "CustomLevels"].

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration package="log4j.test" 
                   status="WARN">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{dd/MM/yyyy HH:mm:ss} %c %m%n"/>
            </Console>
        </Appenders>
       <RandomAccessFile  name="FILE" fileName="${sys:log4j.saveDirectory}/CMSAutomation.${date:yyyy-MM-dd_hh-mm-ss}.log" append="true" immediateFlush="false">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}  %-6p  %C{1}.%t:%L  >>> %m%n"/>
        </RandomAccessFile >
        <Loggers>
            <Logger name="log4j.test.Log4jTest" level="debug">
                <AppenderRef ref="Console"/>
            </Logger>
            <Root level="trace">
                <AppenderRef ref="Console"/>
            </Root>
        </Loggers>
    </Configuration>

Upvotes: 2

Views: 4713

Answers (1)

Vikas Sachdeva
Vikas Sachdeva

Reputation: 5803

This error is coming because RandomAccessFile appender is not defined within <Appenders> XML element.

Below is the correct way of defining any appender including RandomAccessFile appender -

<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" 
               status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{dd/MM/yyyy HH:mm:ss} %c %m%n"/>
        </Console>
        <RandomAccessFile  name="FILE" fileName="${sys:log4j.saveDirectory}/CMSAutomation.${date:yyyy-MM-dd_hh-mm-ss}.log" append="true" immediateFlush="false">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}  %-6p  %C{1}.%t:%L  >>> %m%n"/>
        </RandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="log4j.test.Log4jTest" level="debug">
            <AppenderRef ref="Console"/>
        </Logger>
        <Root level="trace">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

You can check the same in log4j2 documentation here.

Additional one point, you are not using RandomAccessFile appender in any logger. If you will not define it in any logger, it wouldn't work.

Upvotes: 1

Related Questions