【问题标题】:Using Log4J In Netbeans在 Netbeans 中使用 Log4J
【发布时间】:2014-10-21 15:13:18
【问题描述】:

我正在尝试在 Netbeans 中使用 Log4J,但是我很难理解这些教程。他们中的许多人说“这样做”,并假设我知道他们在说什么。我不。如果您愿意,我想分步说明在哪里可以找到适用于 Log4J 的正确库、将它们放在项目中的什么位置,以及使用 Log4J 的示例程序。

【问题讨论】:

    标签: java netbeans log4j


    【解决方案1】:

    log4j 2.x

    与下面类似,但文件名需要为log4j2.properties。 (另请注意,log4j.properties 配置的旧示例实际上似乎在 Log4j 2 中没有做任何有用的事情,因此请确保从专用于 Log4j 2 的教程中复制您的初始配置,而不是旧的 v1。)

    谢谢@bobulous

    log4j 1.x

    如果您收到log4j:WARN No appenders could be found for logger 消息,那么 您很可能没有将 log4j.properties 文件包含在您的 项目。下面是如何将它包含在 NetBeans 中的屏幕截图。

    【讨论】:

    • 只是为了节省其他人 90 分钟的愤怒挫败感,请注意,如果您使用的是 Log4j 2,则文件名需要为 log4j2.properties。 (另请注意,log4j.properties 配置的旧示例实际上似乎在 Log4j 2 中没有做任何有用的事情,因此请确保从专用于 Log4j 2 的教程中复制您的初始配置,而不是旧的 v1。)
    【解决方案2】:

    This very comprehensive working example for log4j2 几乎所有内容,在此处复制以防链接中断

    要获得一个工作示例,请在 netbeans(或任何 IDE)中创建一个新的 maven java 应用程序

    新建项目 -> Maven -> Java 应用程序

    在你的新maven项目中,在netbeans的'project files'下有一个pom.xml,你需要添加这个依赖:

    我用 log4j 版本 2.11.1 对此进行了测试,检查最新的here

       ... 
       </properties>
       <dependencies>
           <dependency>
               <groupId>org.apache.logging.log4j</groupId>
               <artifactId>log4j-core</artifactId>
               <version>2.11.1</version>
           </dependency>
       </dependencies>
    </project>
    

    创建一个src/main/resources/log4j2.properties(这个确切的路径和名称是必需的)

    您可以稍后使用 this 作为参考自定义打印布局

    status = error
    name = PropertiesConfig
    
    filters = threshold
    filter.threshold.type = ThresholdFilter
    filter.threshold.level = debug
    
    appenders = console
    appender.console.type = Console
    appender.console.name = STDOUT
    appender.console.layout.type = PatternLayout
    appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
    rootLogger.level = debug
    rootLogger.appenderRefs = stdout
    rootLogger.appenderRef.stdout.ref = STDOUT
    

    创建一个新类:Log4j2HelloWorldExample.java

    package com.howtodoinjava.log4j2.examples;   
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    
    public class Log4j2HelloWorldExample {
    
        private static final Logger LOGGER = LogManager.getLogger(Log4j2HelloWorldExample.class.getName());
    
        public static void main(String[] args) {
            LOGGER.debug("Debug Message Logged !!!");
            LOGGER.info("Info Message Logged !!!");
            LOGGER.error("Error Message Logged !!!", new NullPointerException("NullError"));
        }
    }
    

    当你运行这个类时,你会得到他的输出

     2016-06-16 13:41:27 DEBUG Log4j2HelloWorldExample:12 - Debug Message Logged !!!
     2016-06-16 13:41:27 INFO  Log4j2HelloWorldExample:13 - Info Message Logged !!!
     2016-06-16 13:41:27 ERROR Log4j2HelloWorldExample:14 - Error Message Logged !!!
     java.lang.NullPointerException: NullError
         at com.howtodoinjava.log4j2.examples.Log4j2HelloWorldExample.main(Log4j2HelloWorldExample.java:14)
        [classes/:?]
    

    如果上面的例子可以独立工作,但是当你将它集成到你的项目中时,可能会有一些依赖干扰

    运行 mvn dependency:tree 并排除所有干扰 log4j 依赖项,我需要排除这些:

    <exclusion>
        <!-- 
            [INFO] |  +- log4j:log4j:jar:1.2.17:compile
            [INFO] |  +- org.slf4j:slf4j-log4j12:jar:1.7.16:compile
        -->
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </exclusion>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
    

    为了将现有的 slf4j 代码桥接到我新添加的 log4j2,我必须包含我找到的这个依赖项 here

       <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-slf4j-impl</artifactId>
          <version>2.9.0</version>
       </dependency>
    

    我还是看到了这个:

    log4j:WARN No appenders could be found for logger
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
    

    我还需要确保 log4j2.property 文件具有我的操作系统特定的行结尾,我使用 Cygwin 创建属性文件并从 Windows 运行 netbeans,但由于属性文件都被读取为单个文件,因此无法找到附加程序按 Windows 行

    【讨论】:

      【解决方案3】:

      http://www.tutorialspoint.com/log4j/log4j_sample_program.htm -

      从这里下载 jar:https://logging.apache.org/log4j/1.2/download.html

      在你的路径中添加这个文件:

      log4j.properties

      # Define the root logger with appender file
      log = /usr/home/log4j
      log4j.rootLogger = DEBUG, FILE
      
      # Define the file appender
      log4j.appender.FILE=org.apache.log4j.FileAppender
      
      # Here is the location output of the file!
      log4j.appender.FILE.File=${log}/log.out
      
      # Define the layout for file appender
      log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
      log4j.appender.FILE.layout.conversionPattern=%m%n
      

      然后运行这个:

      log4jExample.java

      import org.apache.log4j.Logger;
      
      import java.io.*;
      import java.sql.SQLException;
      import java.util.*;
      
      public class log4jExample{
        /* Get actual class name to be printed on */
        static Logger log = Logger.getLogger(
                            log4jExample.class.getName());
      
        public static void main(String[] args)
                      throws IOException,SQLException{
      
           log.debug("Hello this is an debug message");
           log.info("Hello this is an info message");
        }
      }
      

      【讨论】:

      • 好吧,我比平时走得更远,但是在编译、构建并运行程序后我收到了这个:运行:log4j:WARN 找不到记录器的附加程序(log4jexample.Log4jExample)。 log4j:WARN 请正确初始化 log4j 系统。 log4j:WARN 请参阅logging.apache.org/log4j/1.2/faq.html#noconfig 了解更多信息。构建成功(总时间:0 秒)
      • 我认为这意味着您没有在类路径中正确添加 .properties 文件。 stackoverflow.com/questions/1485987/…
      • 现在错误消失了,但被一个新错误取代:java.lang.NoClassDefFoundError。指的是这部分代码:static Logger log = Logger.getLogger(Log4J.class.getName());
      • 运行程序时你的类叫什么?
      • 类名为log4jExample
      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多