簡體   English   中英

使用log4j記錄器未在日志文件中獲取INFO日志

[英]Not getting INFO logs in log file using log4j logger

我從Java和log4j開始。 我的測試程序需要幫助。

$pwd

/ home / test / log4j

$ls

Log4jTest.class Log4jTest.java log_file logger.xml run.sh

$cat Log4jTest.java 
  import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

public class Log4jTest
{
public static void main(String args[])
{
Logger _log;
String loggerConfig = System.getenv ("logger_config");
 if (loggerConfig != null && !loggerConfig.trim ().equals (""))
  {   
    DOMConfigurator.configureAndWatch (loggerConfig);
  }   
else
{

System.out.println("no logger_config found");
    System.exit (-1);
}
 System.out.println("Logger is " + Log4jTest.class.getName ());
   _log = Logger.getLogger (Log4jTest.class.getName ());

 _log.info("logging to logger. Good!");
}
}

$ cat logger.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
            <param name="Target" value="System.out" />
            <param name="threshold" value="OFF" />
            <layout class="org.apache.log4j.PatternLayout">
                    <param name="ConversionPattern"
                            value="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+0} [%t] %-5p %c{1} - %m%n" />
            </layout>
    </appender>

    <appender name="log4j_test" class="org.apache.log4j.RollingFileAppender">
            <param name="File" value="/home/test/log4j/log_file" />
            <param name="append" value="true" />
            <layout class="org.apache.log4j.PatternLayout">
                    <param name="ConversionPattern"
                            value="%d{yyyy-MM-dd HH:mm:ss,SSS}{GMT+0} [%t] %-5p %c{1} - %m%n" />
            </layout>
    </appender>

    <logger name="Log4jTest"
            additivity="false">
            <level value="INFO" />
            <appender-ref ref="log4j_test" />
    </logger>

    <root>
            <level value="INFO" />
            <appender-ref ref="log4j_test" />
    </root>

$export logger_config=/home/test/log4j/log_file

$ javac -cp到log4j__log4j.jar的路徑Log4jTest.java

$ java -cp到log4j__log4j.jar的路徑: Log4jTest

記錄器是Log4jTest

$ cat log_file

題:

(1)是否需要指定控制台附加程序? (2)根源在哪里? (3)root_value和記錄程序的作用是什么? (4)我期待看到:登錄到記錄器。 好!

在log_file中

怎么了?

至少需要一個附加程序。 否則,Log4J不知道在何處打印日志消息。 有各種附加程序:控制台,文件,JMS,JDBC。 每個人都知道將消息發送到不同的目的地。

您無法在控制台上看到日志消息,因為控制台附加程序已關閉:

<param name="threshold" value="OFF" />

將“關閉”更改為“信息”,希望您能看到自己的日志。

Log4J具有記錄器的分層體系結構。 層次結構中的每個層都可以阻止您的消息。 附加過濾在附加程序層上完成。 您可以在此處閱讀更多信息: http : //logging.apache.org/log4j/1.2/manual.html

但是請注意:log4j被其創建者棄用。 看一下logback和slf4j。

不,如果不使用控制台記錄器,則無需定義它。

IMO,但是,沒有控制台記錄器幾乎總是一個壞主意; 大多數IDE都希望默認記錄器進入控制台,許多應用程序服務器也是如此,等等。當然,這完全取決於您的需求。

通常,您將需要一個每個類的記錄器,它只是Logger.getLogger(Log4jTest.class) 在配置文件中設置該記錄器的閾值。

還要注意,您僅可以在類路徑上有一個log4j.xml文件,配置將自動獲取,從而避免了手動配置步驟。

最后,如今,使用特定日志記錄實現的“本機”接口相對不常見,在實際實現周圍使用slf4j,logback或commons-logger更為常見。 並不是說你做不到 ,只是說我不確定你應該做

暫無
暫無

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

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