簡體   English   中英

請正確初始化log4j系統警告

[英]Please initialize the log4j system properly warning

這是錯誤消息 -

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

這是SerialPortUtil類中的調用 -

private static final Logger log = Logger.getLogger(SerialPortUtil.class.getSimpleName());
.
.
.
log.info("Serial port " + port.getName() + " is available");

這是我的 log4j.properties 文件的內容 -

log4j.rootLogger=DebugAppender

#Debug logging
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.Threshold=DEBUG
log4j.appender.DebugAppender.File=activityLog.log
log4j.appender.DebugAppender.MaxFileSize=200KB
log4j.appender.DebugAppender.MaxBackupIndex=5
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%d{DATE} %t - %m%n

並且屬性文件在類路徑上。

一切對我來說都是正確的,那么發生了什么? DEBUG閾值不應該也捕獲INFO日志記錄嗎?

添加代碼

BasicConfigurator.configure();

在您的靜態主類中,如下所示..

注意:添加“\\hadoop-2.7.1\\share\\hadoop\\common\\lib\\commons-logging-1.1.3.jar & \\hadoop-2.7.1\\share\\hadoop\\common\\lib\\log4j-1.2.17.jar” jar " 作為外部引用

import org.apache.log4j.BasicConfigurator;

public class ViewCountDriver extends Configured implements Tool{

    public static void main(String[]args) throws Exception{

        BasicConfigurator.configure(); 

        int exitcode = ToolRunner.run(new ViewCountDriver(), args);
        System.exit(exitcode); 
    }
}

從錯誤消息中的鏈接:

當無法找到默認配置文件 log4j.properties 和 log4j.xml 並且應用程序未執行顯式配置時,就會發生這種情況。 log4j 使用 Thread.getContextClassLoader().getResource() 定位默認配置文件,不直接檢查文件系統。 知道放置 log4j.properties 或 log4j.xml 的適當位置需要了解正在使用的類加載器的搜索策略。 log4j 不提供默認配置,因為在某些環境中可能禁止輸出到控制台或文件系統。 另請參閱常見問題解答:為什么 log4j 無法在 J2EE 或 WAR 應用程序中找到我的屬性?。

找不到配置文件。 您使用的是 xml 還是屬性文件?

另外,使用logback

好的,所以我通過改變它來讓它工作

log4j.rootLogger=DebugAppender

對此

log4j.rootLogger=DEBUG, DebugAppender

顯然你必須先指定rootLogger的日志級別? 如果我浪費了任何人的時間,我深表歉意。

另外,我決定回答我自己的問題,因為這不是類路徑問題。

如果在運行使用 log4j 的程序時遇到錯誤/警告,解決方案是添加類加載器可以看到的 log4j.properties。 通常它在您的 Java 項目的“src”文件夾中:將以下內容添加到文件中

log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

我的解決方法是將“log4j.properties”放入“src”文件夾中。 它在我的包文件夾中不起作用,它必須是源代碼的根目錄。 將它添加到構建路徑,然后將其移動到“參考庫”也不起作用。

重復:將 log4j.properties 放在 src 文件夾的根目錄下。

我的 log4j.properties 文件具有以下內容,適用於基於 Eclipse 的最新版本的 Spring Tool Suite。

# Configure logging for testing: optionally with log file
#log4j.rootLogger=INFO, stdout
log4j.rootLogger=WARN, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%

這對我有用:

public static void main(String[] args) {

        Properties props = new Properties();
        props.load(new FileInputStream("src/log4j.properties"));
        PropertyConfigurator.configure(props);

沒有回答的方法解決了在 NetBeans 中找不到非 Maven jsf web 項目的log4j.properties文件的問題。 所以答案是:

  1. 在項目根文件夾(最外層文件夾)中創建一個名為resources文件夾。
  2. 在左側菜單的項目資源管理器中右鍵單擊項目,選擇屬性。
  3. 在類別中打開源,在源包文件夾中添加該文件夾。
  4. 打開在類別中運行並將其添加到 VM 選項: Dlog4j.configuration=resources/log4j.properties
  5. 單擊確定,隨心所欲地構建和部署項目,就是這樣。

我在 log4j 文件中寫了特殊的模式來檢查 log4j 是否用於我的文件:

# Root Logger Option
log4j.rootLogger=INFO, console

# Redirect Log Messages To Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p | %d{yyyy-MM-dd HH:mm:ss} | [%t] %C{2} xxxx (%F:%L) - %m%n

我檢查了它,因為如果你使用BasicConfigurator.configure(); 在 log4j 中的代碼中使用預定義的模式。

對我有用的是創建一個 log4j 屬性文件(您可以在網上找到許多示例)並將其放在項目目錄中的屬性文件夾中(如果不存在,則創建此文件夾)。 右鍵單擊文件夾和Build Path->Use as Source Folder

希望能幫助到你!

補充一下@Gevorg,如果你在本地運行Spark也有類似情況,把log4j.properties文件放在主文件夾下的resources文件夾下。

嘗試在 main 中執行以下操作:

public static void main(String[] args) {
     PropertyConfigurator.configure(args[0]);
    //... your code

你需要告訴 log4j 它的配置應該是什么。

只需在 main 方法的開頭配置您的 log4j 屬性文件路徑:例如:PropertyConfigurator.configure("D:\\files\\log4j.properties");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM