当前位置: 首页 > 知识库问答 >
问题:

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

孙项禹
2023-03-14

我正在使用一个简单的Java命令行,需要将log4j插入到我的应用程序中,因此我遵循本教程:

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

因此,我完成了以下步骤:

>

  • 我将log4jjar文件放入我的项目库中。

    我把log4j放进去了。属性转换为配置包,我使用以下最低配置对其进行了配置:

    #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
    

    因此,这个配置意味着输出必须打印到控制台中,我将调试模式与之关联。

    现在,教程说:

    在任何Java文件中,添加以下行,以便开始日志记录。

    并显示以下示例代码:

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

    好吧,我不明白我必须做什么才能将Logger实例化到我的类中。

    我的班级名为Mailer,所以我必须做一些类似的事情:

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

    还是怎样我到底要做什么?

    编辑1:我的课程是这样的:

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

    问题是IntelliJ在记录器(Mailer.class)上显示了一个错误;告诉我:Logger(java.Lang.String)在'org'中拥有受保护的访问权限。阿帕奇。log4j。伐木工人

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

    Tnx

  • 共有2个答案

    邵文乐
    2023-03-14

    您必须使用LogManager

    签出此链接-

    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");
    
    陈刚洁
    2023-03-14

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

    logger.debug("Your message);
    ....
    logger.error("Somehting crahsed",e);...
    
     类似资料:
    • 问题内容: 我看到了无数的示例和教程,这些示例和教程展示了如何通过仅设置文件的权限位来创建文件,并且所有这些文件都“作弊”。我想知道/找出如何在创建/更新文件期间正确实例化os.FileMode以提供给编写者。 下面是一个简单的示例: 在上面的基本功能中,权限位0664被设置,尽管这有时可能有意义,但我还是希望有一种正确设置文件模式的正确方法。从上面可以看到,一个常见的示例是UID / GID是已

    • 我对反应很陌生。js和我一直在研究一个组件类(子类),该类具有函数和单个状态对象,我的最终目标是在父类中使用该类,以便它可以调用其函数并更新状态。 我遇到的问题是: 我不知道组件的生命周期,并且 我有着深厚的文化背景 意思:我一直像对待任何C#类而不是JavaScript一样对待这些组件类。我现在知道了。 但我需要帮助评估我的方法并解决我一直看到的这个问题: 这是我的子类组件 从“React”导入

    • 我试图理解如何使用http.get和Angular 2中的Observables将服务调用的结果映射到对象。 看看这个普朗克 我希望返回一个可观察的类型的人的方法。然而!我无法访问属性fullName。我猜想我将不得不创建一个类的新实例,并使用类构造函数将响应映射到这个新对象。但是你如何在方法中做到这一点?

    • 问题内容: 我是编程的新手,我想知道实例化对象时哪里出错了。下面是代码: 问题答案: 您的代码中没有类。您声明的是私有方法。 使用当前代码段,您需要实例化该类并利用该方法。注意,在这种情况下,您的类定义前面有关键字 class。 但这并没有实际意义,您的方法总是会返回。 您是否正在尝试执行以下操作:

    • 问题内容: 这是我的代码: 为什么会这样呢? 第一个和第三个对象具有相同的内容和相同的哈希值,但它们讲述了3个唯一的对象? 问题答案: 您还需要以兼容的方式进行定义–否则,相等性将基于对象身份。 在Python 2上,建议您还定义与保持一致。在Python 3上,默认实现将为您委托。

    • 问题内容: 当我尝试: 编译器给我一个错误。有什么帮助吗? 另外,如果要初始化队列,是否必须实现队列的方法? 问题答案: A 是一个接口,这意味着您不能直接构造一个。 最好的办法是建立关闭一类已经实现了接口,像下面的一个:,,,,,,,,,或。 一种替代方法是编写您自己的类,该类实现必要的Queue接口。除非在极少数情况下您希望在为程序的其余部分提供的同时做一些特别的事情,否则不需要它。 更少使用