javamavenlog4jlog4j2

Keep 30 archived log files in Log4j 2.x Core


I want to configure log4j2.properties file in a that way where my swapi.log entries delete all previous logs written, for example if we want to delete log entry for upto 30 entries, once it reaches to 30, it automatically gets deleted. Because we don't to occupy server memory.

So, far I tried this as given below and its working fine in console and appending in log file. But I badly stuck to figure out that how to delete all previous log entries. Any help would be highly appreciated.

name=PropertiesConfig
appenders = console, file

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=C:\\SWAPILogs\\swapi.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

loggers=file
logger.file.name=com.gds.service
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE

rootLogger.level = debug
rootLogger.appenderRefs = STDOUT
rootLogger.appenderRef.stdout.ref = STDOUT

Solution

  • As remarked by Nitesh in the comments to rotate your log files you need to use a RollingFileAppender. You'll also need:

    You XML configuration will look like:

    <RollingFile
        name="LOGFILE"
        fileName="C:\SWAPILogs\swapi.log"
        filePattern="C:\SWAPILogs\swapi-%i.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        <SizeBasedTriggeringPolicy size="10 MB" />
        <DefaultRolloverStrategy
            fileIndex="min"
            max="30" />
    </RollingFile>
    

    The properties configuration format you are using is much more verbose, but can be easily derived from the XML format: all properties of a certain component share the same prefix and are specified using <component prefix>.<property name>. All subcomponents use the prefix <parent component's prefix>.<component id>, where <component id> is an arbitrarily chosen identifier. Each component must have a property <component prefix>.type that reflects the tag name in the XML configuration.

    The configuration above can be translated into:

    appender.file.type = RollingFile
    appender.file.name = LOGFILE
    appender.file.fileName=C:\\SWAPILogs\\swapi.log
    appender.file.filePattern=C:\\SWAPILogs\\swapi-%i.log
    appender.file.layout.type=PatternLayout
    appender.file.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    appender.file.policy.type=SizeBasedTriggeringPolicy
    appender.file.policy.size=10 MB
    appender.file.strategy.type=DefaultRolloverStrategy
    appender.file.strategy.fileIndex=min
    appender.file.strategy.max=30