Log4J没有写入文件

时间:2015-08-10 09:36:58

标签: java logging log4j

在我的应用程序中,我想要登录文件和控制台。我在我的分类中使用记录器:

<?php
$possible_values = array('wc', 'bathrooms', 'bedrooms');
$stored_value = get_post_meta( $post->ID, 'field_name', true);

foreach ($possible_values as $possible_value) {
    if ($stored_value == $possible_value) {
        echo 'Yes have ' . $possible_value;
    }
    else {
        echo 'No have ' . $possible_value;
    }
}
?>

配置文件按预期加载(请参阅输出中的 private static Logger LOGGER = Logger.getLogger(CLASSNAME); 行):

setfile

输出:

  DOMConfigurator.configure("c:\\test\\log4j2.xml"); 

但是当我尝试在上面的条目后直接登录时,我不会得到任何结果

log4j: reset attribute= "false".
log4j: Threshold ="null".
log4j: Level value for root is  [DEBUG].
log4j: root level set to DEBUG
log4j: Class name: [org.apache.log4j.RollingFileAppender]
log4j: Setting property [append] to [false].
log4j: Setting property [maxFileSize] to [10MB].
log4j: Setting property [maxBackupIndex] to [10].
log4j: Setting property [file] to [c:\test\App.log].
log4j: Parsing layout of class: "org.apache.log4j.PatternLayout"
log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n].
log4j: setFile called: c:\test\App.log, false
log4j: setFile ended
log4j: Adding appender named [file] to category [root].
log4j: Class name: [org.apache.log4j.ConsoleAppender]
log4j: Parsing layout of class: "org.apache.log4j.PatternLayout"
log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p     %c{1}:%L - %m%n].
log4j: Adding appender named [console] to category [root].

允许程序写入文件。 无论是否加载文件,控制台输出都可以正常工作。

有人发现可能有误吗?

配置文件:

  LOGGER.logp(Level.ALL, CLASSNAME, "TEST", "TEST__");

编辑:我使用log4j-1.2.17

Edit2:关闭邮件程序组件可以登录文件,而上面的代码仍然只能登录控制台窗口......

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"  xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" 
          value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <appender name="file" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false" />
        <param name="maxFileSize" value="10MB" />
        <param name="maxBackupIndex" value="10" />
        <param name="file" value="c:\\test\\App.log" />
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" 
            value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="file" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

2 个答案:

答案 0 :(得分:2)

如果文件存在且您有append = false,则无法登录该文件。

<param name="append" value="false" />

将此行更改为true,或者删除该文件应解决您的问题,不会将任何内容写入文件。

答案 1 :(得分:1)

所以,基本上你是在尝试使用jdk日志记录和log4j实现。为此你需要使用&gt; log4j 2.0。并使用log4j-jul适配器将对jdk logging api的所有调用路由到log4j2。

你可以尝试如下.. 依赖关系:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jul</artifactId>
        <version>2.1</version>
    </dependency>

示例类文件

package com.test.log4j_test;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class App 
{

    private static final String CLASSNAME = "App.class";
    private static Logger LOGGER = Logger.getLogger(CLASSNAME);

    public static void main( String[] args ) throws FileNotFoundException,    IOException
    {
        LOGGER.logp(Level.WARNING, CLASSNAME, "TEST", "TEST__");
    }
}

log4j.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
      <Appenders>
        <File name="A1" fileName="c:\\test\\app.log" append="true">
          <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
        </File>
        <Console name="STDOUT" target="SYSTEM_OUT">
          <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
      </Appenders>
      <Loggers>
        <Logger name="org.apache.log4j.xml" level="debug">
          <AppenderRef ref="A1"/>
        </Logger>
        <Root level="ALL">
          <AppenderRef ref="STDOUT"/>
          <AppenderRef ref="A1"/>
        </Root>
      </Loggers>
    </Configuration>

要运行此程序,请在下面添加java属性

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Dlog4j.configurationFile=file:///c:/test/log4.xml