如何正确地将 log4j Logger 对象实例化到我的 class 中?

How to correctly instantiate a log4j Logger object into my class?

我正在使用一个简单的 Java 命令行,我需要将 log4j 插入到我的应用程序中,所以我正在学习本教程:

http://veerasundar.com/blog/2009/07/log4j-tutorial-adding-log4j-logging-to-your-project/

所以我做了以下步骤:

  1. 我把log4j的jar文件放到我项目的库里了

  2. 我将 log4j.properties 放入配置包中,并使用以下最小配置对其进行了配置:

    #define the console appender
    log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
    
    # now define the layout for the appender
    log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
    log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
    
    # now map our console appender as a root logger, means all log messages will go to this appender
    log4j.rootLogger = DEBUG, consoleAppender
    

    所以这个配置说输出必须打印到控制台,我关联 DEBUG 模式。

  3. 现在教程是这样说的:

    In any of your Java file, add the below lines, in order to start logging.

    并显示此示例代码:

    private static Logger logger = Logger.getLogger(MyclassName.class);
    logger.debug("this is a sample log message.");
    

    好的,我不明白我到底需要做什么才能将 Logger 实例化到我的 class。

    我的 class 被命名为 Mailer 所以我必须做类似的事情:

    private static Logger logger = Logger.getLogger(Mailer.class);
    

    或者什么?我到底要做什么?

编辑 1: 我的 class 是这样的:

public class Mailer {

    private static final org.apache.log4j.Logger logger = new Logger(Mailer.class);
    ...................................
    ...................................
    ...................................
}

问题是 IntelliJ 在 Logger(Mailer.class); 上向我显示一个错误并告诉我:Logger(java.Lang.String) 在 'org.apache.log4j.Logger'

中具有受保护的访问权限

为什么?我该如何解决这个问题?

Tnx

然后在您的代码中编写例如:

logger.debug("Your message);
....
logger.error("Somehting crahsed",e);...

你必须使用 LogManager

检查此 link-

https://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/LogManager.html#getLogger()

所以对于您的代码,更改应该是这样的-

     private static final org.apache.log4j.Logger logger = LogManager.getLogger(Mailer.class);
     logger.debug("Its debugging");