簡體   English   中英

Java 進程無法將日志寫入控制台

[英]Java Process Not Able To Write Logs To Console

我在我的 java 應用程序中實現 log4j2,我嘗試使用 log4j2 配置文件將數據寫入控制台。 我創建了一個名為 Interface.jar 的 jar。 為此jar創建了軟鏈接,並使用不同的arguments運行。創建的2個軟鏈接是Interface1和Interface2,具有不同的arguments。Interface1和Interface2具有不同的log4j2配置文件路徑。

System.setProperty("log4j.configurationFile", System.getenv("LOG4J_INTERFACE1"));
System.setProperty("log4j.configurationFile", System.getenv("LOG4J_INTERFACE2"));

Log4j Interface1 的配置文件是:

status = warn
appenders=console
property.LOG_PATTERN = %d{yyyy-MM-dd} %d{HH:mm:ss,SSS zzz}|%p|INTERFACE1||||||%m%n
appender.console.type = Console
appender.console.name = LogToConsole
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = ${LOG_PATTERN}
logger.Log4JExample.name = Log4JExample
logger.Log4JExample.level = debug
logger.Log4JExample.additivity = false
logger.Log4JExample.appenderRef.console.ref = LogToConsole
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = LogToConsole

Log4j Interface2 的配置文件是:

status = warn
appenders=console
property.LOG_PATTERN = %d{yyyy-MM-dd} %d{HH:mm:ss,SSS zzz}|%p|INTERFACE2||||||%m%n
appender.console.type = Console
appender.console.name = LogToConsole2
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = ${LOG_PATTERN}
logger.Log4JExample.name = Log4JExample
logger.Log4JExample.level = debug
logger.Log4JExample.additivity = false
logger.Log4JExample.appenderRef.console.ref = LogToConsole2
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = LogToConsole2

問題是,當我啟動這兩個過程時,Interface1 能夠寫入控制台,但 Interface2 無法這樣做。 這兩個過程都運行良好。 我看到的一個挑戰是這兩個 jars 都保存了主 class Interface.class。

 LogManager.getLogger(Interface.class);

任何人都可以闡明我 stream 數據如何使用軟鏈接從多個進程進行控制台。

需要有 2 個附加程序。 您可以使用以逗號分隔的所有附加程序。

我可以看到兩個記錄器都有不同的格式,都需要編寫控制台。 在這些情況下,您需要對不同的記錄器使用標記過濾器。

下面是示例log4j2.properties文件


appenders = console, console1

appender.console.type = Console
appender.console.name = LogToConsole
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd} %d{HH:mm:ss,SSS zzz}|%p|INTERFACE1||||||%m%n

appender.console1.type = Console
appender.console1.name = LogToConsole2
appender.console1.layout.type = PatternLayout
appender.console1.layout.pattern = %d{yyyy-MM-dd} %d{HH:mm:ss,SSS zzz}|%p|INTERFACE2||||||%m%n

loggers = rolling, interface2
logger.rolling.name = org.apache.logging.log4j.core.appender.rolling


#configure rootLogger and attach all the appenders to it
rootLogger.level = info
rootLogger.appenderRef.console.ref = LogToConsole

logger.interface2.name = Interface2
logger.interface2.additivity = false
logger.interface2.level = debug
logger.interface2.appenderRef.console1.ref = LogToConsole2

看來您正在設置系統屬性,如下所示:

System.setProperty("log4j.configurationFile", System.getenv("LOG4J_INTERFACE1"));

而您應該設置log4j2.configurationFile 注意 log4j2 前綴。

我還建議設置另一個系統屬性

java -Dlog4j2.debug=true ...

只是為了更多地了解 log4j2 在做什么。 一旦你開心,你就可以把它關掉。

暫無
暫無

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

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