【问题标题】:Log4j File created but emptyLog4j 文件已创建但为空
【发布时间】:2018-11-12 10:59:49
【问题描述】:

尝试了其他问题的答案,但无法解决问题

我有用于配置 log4j 的 xml 文件。创建了两个日志文件,但文件为空。我无法写入文件。

这是我的 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");

但没有任何内容写入日志文件。我看不到任何错误,我尝试了其他问题中提到的解决方案。

【问题讨论】:

    标签: java logging exe4j


    【解决方案1】:

    一个记录器总是由一个唯一的名称在所有初始化的记录器中标识

    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”的记录器。您创建了名称为“事件”、“错误”的记录器

    您可以使用“com.mobios.common.Log4jUtil”在 log4j.xml 文件中添加一个部分,并向其中添加“事件”和“错误”处理程序,以便它记录到相应的文件中

    <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);
    
    }
    

    【讨论】:

    • 正如你所说,我已将记录器部分添加到 xml。但仍然无法正常工作。但是您的解决方案似乎还可以。但不适合我。我已经弄清楚了。如果我将 添加到根标记,它会将应用程序统计中的所有内容写入该错误文件。但这不是我需要的。我只需要在错误文件中写入错误,在事件文件中写入信息。 #pvpks
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多