Использование log4j на centos 7 для входа в rsyslog - PullRequest
0 голосов
/ 29 сентября 2018

В настоящее время я пытаюсь написать класс-оболочку (Log.java), чтобы абстрагировать запись в системный журнал.Я работаю на Ubuntu 18 и проверил свой класс Log, запустив его через Intellij.Я установил log4j из (https://logging.apache.org/log4j/2.0/download.html: apache-log4j-2.11.1-bin.tar.gz)
Вот классы и файл 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");
    }


}

Однако мне нужно иметь возможность использовать эти классы на моемCentos 7 виртуальная машина без использования IDE.В Centos 7 я установил пакет yum: log4j, и, таким образом, файл jar находится по адресу /usr/share/java/log4j.jar

Я попытался связать Log.java, Main.java и log4j.jar вместе, используя javac, однако, каждый раз, когда я пытаюсь запустить java Main, я получаю сообщение об ошибке, в котором говорится, что org.apache.log4j.logger не может быть найден.

Я также пытался создать jar из этих файлов, но я получаю ту же ошибку.

Как создать сценарий bash, чтобы связать эти файлы вместе, разрешить все зависимости и создатьисполняемый файл, который я могу запустить на своей виртуальной машине?Имейте в виду, что регистратор должен знать местоположение xml-файла, которого я смог достичь только путем размещения пути в параметрах vm в Intellij.

@ 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.

1 Ответ

0 голосов
/ 29 сентября 2018

Сначала вам нужно скомпилировать класс Log.java с jar-файлами log4j в classpath (затем скомпилировать класс Main).

Для выполнения кода Main вам потребуется:

  1. Добавьте файлы log4j в путь к классам.
  2. Добавьте системное свойство конфигурации log4j (-Dlog4j.configurationFile = "log4j.xml").https://logging.apache.org/log4j/2.x/manual/configuration.html

Файл bash должен выглядеть следующим образом:

LOG4J2_DIR="./apache-log4j-2.11.1-bin"

javac -cp $LOG4J2_DIR/log4j-core-2.11.1.jar:$LOG4J2_DIR/log4j-api-2.11.1.jar:$LOG4J2_DIR/log4j-1.2-api-2.11.1.jar Log.java

javac Main.java

java -Dlog4j.configurationFile="log4j.xml" -cp .:$LOG4J2_DIR/log4j-core-2.11.1.jar:$LOG4J2_DIR/log4j-api-2.11.1.jar:$LOG4J2_DIR/log4j-1.2-api-2.11.1.jar Main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...