Search code examples
log4j2apache-karaf

How to use multiple appenders of same type with one logger using properties file?


I have what should be a simple question but I can't figure it out. What is the correct syntax to use multiple appenders of the same type (RollingFile) with a single logger in Log4j2 properties file format?

For background, I am using Karaf 4.2.7 which uses pax logging. My logging config file is in the properties format.

log4j2.appender.fileapp1.type = RollingRandomAccessFile
log4j2.appender.fileapp1.name = FileApp1
...

log4j2.appender.fileapp2.type = RollingRandomAccessFile
log4j2.appender.fileapp2.name = FileApp2
...

log4j2.logger.myloggername.name = com.acme
log4j2.logger.myloggername.appenderRef.RollingFile.ref = FileApp1, FileApp2

Putting both appenders on that last line separated by a comma does not work. It works if I have only one appender or the other. I also tried

log4j2.logger.myloggername.appenderRef.RollingFile.ref = [FileApp1, FileApp2]

log4j2.logger.myloggername.appenderRef.RollingFile.ref = {FileApp1, FileApp2}

log4j2.logger.myloggername.appenderRef.RollingFile.ref = [{FileApp1}, {FileApp2}]

None of those works. I can't seem to find any examples online of how to do this.


Solution

  • I refer to two web page(thanks).

    Add and define "~s".

    appenders, appenderRefs,

    This is notice for define what will be on next.

    name=PropertiesConfig
    property.filename_fileapp1 = ./logs/fileapp1.log
    property.filename_fileapp2 = ./logs/fileapp2.log
    
    appenders = console, fileapp1, fileapp2
    
    appender.console.type = Console
    appender.console.name = STDOUT
    ...
    
    appender.fileapp1.type = RollingRandomAccessFile
    appender.fileapp1.name = fileapp1_AppenderName
    appender.fileapp1.fileName = ${filename_fileapp1}
    appender.fileapp1.filePattern = ${filename_fileapp1}.%d{yyyy-MM-dd}.log
    ...
    
    appender.fileapp2.type = RollingRandomAccessFile
    appender.fileapp2.name = fileapp2_AppenderName
    appender.fileapp2.fileName = ${filename_fileapp2}
    appender.fileapp2.filePattern = ${filename_fileapp2}.%d{yyyy-MM-dd}.log
    ...
    
    
    loggers = mylogger1
    logger.mylogger1.name = com.jornathan.sample.log4j2PropertyTest
    logger.mylogger1.level = info   
    
    #keep this value for testing.
    logger.mylogger1.additivity = true
    
    #Here is what you need.
    logger.mylogger1.appenderRefs = fileapp1Appender, fileapp2Appender   
    logger.mylogger1.appenderRef.fileapp1Appender.ref = fileapp1_AppenderName
    logger.mylogger1.appenderRef.fileapp2Appender.ref = fileapp2_AppenderName