Log4j файл создан, но пустой - PullRequest
0 голосов
/ 12 ноября 2018

Пробовал ответы на другие вопросы, но не смог преодолеть проблему

У меня есть XML-файл для настройки log4j. Два файла журнала созданы, но файлы пусты. Я не могу написать в файл.

Это мой xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">


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

	<appender name="ErrorAPPENDER"
		class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="D://Error.log" />
		<param name="Append" value="true" />
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{yyyy-MM-dd,HH:mm:ss},%m%n" />
		</layout>
	</appender>

	<appender name="EventAPPENDER"
		class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="D://Event.log" />
		<param name="Append" value="true" />
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{yyyy-MM-dd,HH:mm:ss},%m%n" />
		</layout>
	</appender>
	
	<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%m%n" />
		</layout>
	</appender>

	<logger name="Event" additivity="false">
		<level value="debug" />
		<appender-ref ref="EventAPPENDER" />
	</logger>

	<logger name="Error" additivity="false">
		<level value="debug" />
		<appender-ref ref="ErrorAPPENDER" />
	</logger>



	<root>
		<priority value="debug" />
		<appender-ref ref="ConsoleAppender" />
	</root>
</log4j:configuration>

И это класс инициализации

package com.mobios.common;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Log4JUtil {

    public static final Logger logger=   Logger.getLogger(Log4JUtil.class);

}

И вот как я вхожу

Log4JUtil.logger.getLogger("ErrorAPPENDER").error("sdsffd");

Но в файл журнала ничего не записывается. Я не вижу никакой ошибки, и я попробовал решения, упомянутые в других вопросах.

1 Ответ

0 голосов
/ 12 ноября 2018

Регистратор всегда идентифицируется уникальным именем во всех регистраторах, инициализированных до сих пор

Logging.getLogger (Log4jUtil.class) создает регистратор с именем "com.mobios.common.Log4jUtil" (Log4jUtil.class.getName ()) или возвращает уже созданный регистратор с таким именем https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html#getLogger(java.lang.Class)

В вашем файле log4j.xml вы не создали ни одного регистратора с именем "com.mobios.common.Log4jUtil". Вы создали регистраторы с именами «Событие», «Ошибка»

Вы можете добавить раздел в файл log4j.xml с помощью «com.mobios.common.Log4jUtil» и добавить к нему обработчики «Event» и «Error», чтобы он записывал в соответствующие файлы

<logger name="com.mobios.common.Log4jUtil" additivity="false">
    <level value="debug" />
    <appender-ref ref="EventAPPENDER" />
    <appender-ref ref="ErrorAPPENDER" />
</logger>

Во время регистрации вам не нужно снова регистрировать сообщения с помощью вызова getLogger (). В вашем Log4jUtil.class вы можете просто сделать,

logger.error("sdsffd")

В других классах, если вы хотите использовать регистратор из Log4jUtil.class, вы можете сделать Logger.getLogger(Log4JUtil.class) и это возвращает уже созданный экземпляр логгера с прикрепленными обработчиками

package com.mobios.common;

import org.apache.log4j.Logger;

public class AnotherClass {

    public static final Logger logger=   Logger.getLogger(Log4JUtil.class);

}
...