【发布时间】:2019-03-05 01:57:49
【问题描述】:
目前我正在尝试编写一个包装类 (Log.java) 以将日志记录抽象到 syslog。我在 Ubuntu 18 上运行,并通过 Intellij 运行它来测试我的 Log 类。我从 (https://logging.apache.org/log4j/2.0/download.html: apache-log4j-2.11.1-bin.tar.gz )
安装了 log4j
这是我拥有的类和 log4j.xml 文件:
log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" name="Main" packages="">
<Appenders>
<Syslog name="test" host="localhost" port="514"
protocol="TCP" appName="Main"
facility="LOCAL3" newLine="true"
/>
</Appenders>
<Loggers>
<Logger name="Log" level="info">
<AppenderRef ref="test"/>
</Logger>
<Root level="info">
<AppenderRef ref="test"/>
</Root>
</Loggers>
</Configuration>
Log.java:
import org.apache.log4j.*;
public class Log {
private String _ident;
private static final Logger logger = Logger.getLogger("Log");
public Log(String ident) {
_ident = ident;
}
public void info(String message) {
logger.info("[INFO]" + "["+ _ident+ "] " +message);
}
public void debug(String message) {
logger.debug("[DEBUG]" + "["+ _ident+ "] " +message);
}
public void warn(String message) {
logger.warn("[WARNING]" + "["+ _ident+ "] " +message);
}
public void error(String message) {
logger.error("[ERROR]" + "["+ _ident+ "] " +message);
}
}
Main.java:
public class Main {
public static void main(String args[]) {
Log log = new Log("Test");
log.info("this is info");
log.error("This is error");
log.warn("This is warn");
log.debug("This is debug");
}
}
但是,我需要能够在不使用 IDE 的情况下在我的 centos 7 虚拟机上使用这些类。在 Centos 7 上,我安装了 yum 包:log4j,因此 jar 文件位于 /usr/share/java/log4j.jar
我尝试使用 javac 将 Log.java、Main.java 和 log4j.jar 链接在一起,但是,每次我尝试运行 java Main 时,都会收到一条错误消息,指出 org.apache.log4j.logger 不能被发现。
我也尝试从这些文件创建一个 jar,但我得到了同样的错误。
如何创建一个 bash 脚本来将这些文件链接在一起,解决所有依赖关系,并生成一个可以在我的虚拟机上运行的可执行文件?请记住,记录器需要知道 xml 文件的位置,我只能通过将路径放在 Intellij 的 vm 选项中来实现。
@Ice:所以我创建了一个 bash 脚本:
#!/bin/bash
LOG4j2_DIR="/usr/share/java/"
javac -cp $LOG4J2_DIR/log4j.jar Log.java
javac Main.java
java -Dlog4j.configurationFile="log4j.xml" -cp .:$LOG4J2_DIR/log4j.jar
Main
我收到以下错误:
log4j:WARN Continuable parsing error 2 and column 54
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Continuable parsing error 2 and column 54
log4j:WARN Document is invalid: no grammar found.
log4j:ERROR DOM element is - not a <log4j:configuration> element.
log4j:WARN No appenders could be found for logger (Log).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
【问题讨论】:
标签: java logging log4j centos7 rsyslog