Log4j 2. How get log4j's debug messages?

自作多情 提交于 2021-02-07 11:29:10

问题


As far as i understand log4j can handle system property -Dlog4j.debug. If you run your app with it you will get log4j's debug output.

Example: java -Dlog4j.debug -jar test.jar

Is there something similar for log4j 2?


回答1:


Update January 2018:

From Log4j 2.10, this is easy: just run your program with system property log4j2.debug (no value needed; an empty string is fine).


The current (log4j-2.1) documentation on the status logger is a bit confusing. Basically:

  • Until a configuration is found, status logger level can be controlled with system property org.apache.logging.log4j.simplelog.StatusLogger.level.
  • After a configuration is found, status logger level can be controlled in the configuration file with the "status" attribute, for example: <Configuration status="trace">.

UPDATE: the documentation was improved in log4j-2.2.




回答2:


It can be confusing, the nearest equivilent of the Log4J 1.x command line argument -Dlog4j.debug is -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace which sets the Log4J 2.x "status logger" level to trace and provides detailed output about the logging configuration.

Log4J 1.x allows you to manually specify the location of the configuration file on the command line using -Dlog4j.configuration=file:///var/lib/tomcat7/log4j.xml where the configuration file is located at /var/lib/tomcat7/log4j.xml. In Log4J 2.x there is a subtle difference in the argument -Dlog4j.configurationFile=file:///var/lib/tomcat7/log4j.xml, 'configurationFile' rather than 'configuration'.

Obviously you need to ensure that your configuration file is suitible for the version of Log4J being used, the XML structure differs between 1.x and 2.x.




回答3:


In case someone needs to set DEBUG level programmatically

// for your custom logger
Configurator.setLevel("com.name.of.logger", Level.DEBUG);
// for root logger
Configurator.setRootLevel(Level.DEBUG);

OR without imports

org.apache.logging.log4j.core.config.Configurator.setLevel(
    "com.name.of.logger", 
    org.apache.logging.log4j.Level.DEBUG
);



回答4:


I've had a frustrating amount of difficulty getting Log4J2 up and running, and printing the StatusLogger is no exception. In theory you can set it in the config file with the status field, however I've not been able to make that work thusfar.

You can run the following at the beginning of your main method however:

StatusConsoleListener listener = new StatusConsoleListener(Level.ALL);
StatusLogger.getLogger().registerListener(listener);
LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); // initialize logger

Note your main() class cannot have any static Loggers, or they'll be initialized before this is called, meaning the loading status messages won't print.



来源:https://stackoverflow.com/questions/19574413/log4j-2-how-get-log4js-debug-messages

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!