Hariama
Hariama

Reputation: 13

Migration from log4j 1.x to log4j 2.12.1

i currently upgraded log4j 1.x to log4j 2.12.1 and when i wanted to start the program i get the following error message:

2020-10-15 10:44:38,092 main ERROR The parameter is null: filePattern
2020-10-15 10:44:38,094 main ERROR The parameter is null: policy
2020-10-15 10:44:38,095 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile org.apache.logging.log4j.core.config.ConfigurationException: Arguments given for element RollingFile are invalid: field 'filePattern' has invalid value 'null', field 'policy' has invalid value 'null'
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:208)
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:579)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:651)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:668)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
        at com.AJAx.first.server.FirstServer.<clinit>(FirstServer.java:10)

2020-10-15 10:44:38,100 main ERROR The parameter is null: filePattern
2020-10-15 10:44:38,101 main ERROR The parameter is null: policy
2020-10-15 10:44:38,101 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile org.apache.logging.log4j.core.config.ConfigurationException: Arguments given for element RollingFile are invalid: field 'filePattern' has invalid value 'null', field 'policy' has invalid value 'null'
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:208)
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:579)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:651)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:668)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
        at com.AJAx.first.server.FirstServer.<clinit>(FirstServer.java:10)

2020-10-15 10:44:38,111 main ERROR Null object returned for RollingFile in Appenders.
2020-10-15 10:44:38,111 main ERROR Null object returned for RollingFile in Appenders

i think it has to be something with the properties File, but i am really not sure if i didnt made some mistakes with the migration:

old log4j 1.x:

log4j.rootLogger=DEBUG, DefaultAppender, ErrorAppender, ConsoleAppender

log4j.appender.ConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.DefaultAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ErrorAppender=org.apache.log4j.DailyRollingFileAppender

log4j.appender.ConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ConsoleAppender.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n

# DefaultAppender uses PatternLayout.
log4j.appender.DefaultAppender.File=../var/first-server.log
log4j.appender.DefaultAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.DefaultAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DefaultAppender.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n

# ErrorAppender uses PatternLayout.
log4j.appender.ErrorAppender.File=../var/first-server_error.log
log4j.appender.ErrorAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.ErrorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ErrorAppender.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n
log4j.appender.ErrorAppender.threshold=ERROR

log4j.logger.com.ajax.db=DEBUG
log4j.logger.com.ajax.util=DEBUG
log4j.logger.com.first.ajax.server=DEBUG
log4j.logger.com.mchange=WARN
log4j.logger.org.springframework=INFO
log4j.logger.com.first.ajax.common.util=WARN
log4j.logger.org.apache.cxf=WARN
log4j.logger.org.mortbay=WARN

the new log4j2:

status=ERROR
rootLogger.level=DEBUG
appenders=default,error,console

appender.console.type=console
appender.console.name=STDOUT
appender.console.target=SYSTEM_OUT
appender.default.type=RollingFile
appender.default.name=RollingFile
appender.error.type=RollingFile
appender.error.name=RollingFile

appender.console.layout.type=PatternLayout
appender.console.layout.pattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n

# DefaultAppender uses PatternLayout.
appender.default.fileName=../var/first-server.log
appender.default.datePattern='.'yyyy-MM-dd
appender.default.layout.type=PatternLayout
appender.default.layout.pattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n

# ErrorAppender uses PatternLayout.
appender.error.fileName=../var/first-server_error.log
appender.error.datePattern='.'yyyy-MM-dd
appender.error.layout.type=PatternLayout
appender.error.layout.pattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n
appender.error.filter.threshold.type=ThresholdFilter
appender.error.filter.threshold.level=error

rootLogger.appenderRef.console.ref = STDOUT

logger.db.name=com.ajax.db
logger.db.level=DEBUG
logger.util.name=com.ajax.util
logger.util.level=DEBUG
logger.server.name=com.first.ajax.server
logger.server.level=DEBUG
logger.mchange.name=com.mchange
logger.mchange.level=WARN
logger.springframework.name=org.springframework
logger.springframework.level=INFO
logger.util.name=com.Ajax.first.common.util
logger.util.level=WARN
logger.cxf.name=org.apache.cxf
logger.cxf.level=WARN
logger.mortbay.name=org.mortbay
logger.mortbay.level=WARN

Can someone help there?

----EDIT---------

status=ERROR
rootLogger.level=%%logging_level%%
appenders= default, error, console

appender.console.type=console
appender.console.name=STDOUT
appender.console.target=SYSTEM_OUT
appender.default.type=RollingFile
appender.default.name=RollingFile
appender.error.type=RollingFile
appender.error.name=RollingFile

appender.console.layout.type=PatternLayout
appender.console.layout.pattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n

# DefaultAppender uses PatternLayout.
appender.default.fileName=../var/first-server.log
appender.default.filePattern=../var/first-server-%d{yyyyMMdd}.log
appender.default.layout.type=PatternLayout
appender.default.layout.pattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n
appender.default.policies.type = Policies
appender.default.policies.time.type = TimeBasedTriggeringPolicy
appender.default.policies.time.interval = 1
appender.default.policies.time.modulate = true

# ErrorAppender uses PatternLayout.
appender.error.fileName=../var/first-server_error.log
appender.error.filePattern=../var/first-server_error-%d{yyyyMMdd}.log
appender.error.layout.type=PatternLayout
appender.error.layout.pattern=%d{yyyy.MM.dd HH:mm:ss,SSS} %-5p [%t] %c [%X{request} %X{command}] - %m%n
appender.error.filter.threshold.type=ThresholdFilter
appender.error.filter.threshold.level=ERROR
appender.error.policies.type = Policies
appender.error.policies.time.type = TimeBasedTriggeringPolicy
appender.error.policies.time.interval = 1
appender.error.policies.time.modulate = true

rootLogger.appenderRef.console.ref = STDOUT

logger.db.name=com.ajax.db
logger.db.level=WARN
logger.util.name=com.ajax.util
logger.util.level=WARN
logger.mchange.name=com.mchange
logger.mchange.level=WARN
logger.springframework.name=org.springframework
logger.springframework.level=WARN
logger.util.name=com.ajax.first.common.util
logger.util.level=WARN
logger.cxf.name=org.apache.cxf
logger.cxf.level=WARN
logger.mortbay.name=org.mortbay
logger.mortbay.level=WARN

Upvotes: 1

Views: 4853

Answers (1)

knueser
knueser

Reputation: 437

You're missing some configurations in your log4j2 properties. You created RollingFile appenders, however you didn't define how they should roll. That's why the errors are telling you that filePattern and policy are null. Note that the DailyRollingFileAppender class no longer exists in log4j2, so you have to basically set it up yourself.

The filePattern property tells you how to name the file when you roll it. For example, if you wanted the rolled files to contain the date, you could do something like

appender.default.filePattern=../var/first-server-%d{yyyyMMdd}.log

which would give you a name like first-server-20201017.log.

You also need to set up the policies to describe when to roll. In your case it looks like you want daily rolling, so it would be something like

appender.default.policies.type = Policies
appender.default.policies.time.type = TimeBasedTriggeringPolicy
appender.default.policies.time.interval = 1
appender.default.policies.time.modulate = true

This page gives a lot more details about configuring log4j2.

Upvotes: 2

Related Questions