gpt4 book ai didi

java - Log4J 不写入文件

转载 作者:行者123 更新时间:2023-12-01 22:10:28 24 4
gpt4 key购买 nike

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

 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__");

允许程序写入文件。无论是否加载文件,控制台输出都有效。

有人发现可能有错误吗?

配置文件:

<?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>

编辑:我使用 log4j-1.2.17

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

private static final Logger log = Logger.getLogger(Mailer.class);

public static void logMail(String mailString)
{
log.error(mailString);
log.info(mailString);
}

最佳答案

所以,基本上你正在尝试使用 jdk 日志记录和 log4j 实现。为此,您需要使用 > log4j 2.0 。并使用 log4j-jul 适配器将对 jdk 日志记录 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

关于java - Log4J 不写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31916208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com