如何正确地初始化log4j ?

在添加log4j到我的应用程序后,每次执行我的应用程序时,我都会得到以下输出:

log4j:WARN No appenders could be found for logger (slideselector.facedata.FaceDataParser).
log4j:WARN Please initialize the log4j system properly.

这似乎意味着配置文件丢失。 这个配置文件应该放在哪里,一个好的开始内容是什么?< / p >

我正在使用纯java开发桌面应用程序。所以没有网络服务器等等…

633484 次浏览

找到一个log4j。属性或log4j.xml,它具有根追加器,并将其放在类路径中。

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

将登录到控制台。我更喜欢记录而不是文件,这样您就可以事后进行调查。

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

尽管对于详细日志记录应用程序,100KB通常需要增加到1MB或10MB,特别是调试。

我个人设置了多个记录器,并将根记录器设置为警告或错误级别,而不是调试级别。

你在发展什么?您是否使用Apache Tomcat?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

我在我的Java应用程序中有一个这样的属性。

默认情况下,Log4j在类路径上查找名为log4j.propertieslog4j.xml的文件。

你可以通过设置在这里所描述的系统属性来控制它使用哪个文件来初始化自己(请参阅“默认初始化过程”部分)。

例如:

java -Dlog4j.configuration=customName ....

将导致log4j在类路径上查找名为customName的文件。

如果你有问题,我发现打开log4j.debug很有帮助:

-Dlog4j.debug

它将打印到系统。给出了很多有用的信息,比如它使用哪个文件来初始化自己,哪个记录器/追加器被配置了,以及如何配置等等。

配置文件可以是java属性文件,也可以是xml文件。下面是来自log4j介绍文档页面的属性文件格式示例:

log4j.rootLogger=debug, stdout, R


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout


# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n


log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log


log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1


log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

虽然正确地设置log4j对于“真正的”项目很好,但你可能想要一个快速而肮脏的解决方案,例如,如果你只是在测试一个新库。

如果是,则调用静态方法

org.apache.log4j.BasicConfigurator.configure();

将在控制台设置基本日志记录,错误消息将消失。

我的log4j被以下属性文件修复:

## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

如果你把所有东西都扔掉(比如你在考试)

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

如果我们在log4j之上使用apache公共日志包装器,那么我们需要在类路径中有两个可用的jar。另外,commons-logging.propertieslog4j.properties/xml应该在类路径中可用。

我们也可以使用-Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>将实现类和log4j.properties名称传递为JAVA_OPTS。在app/web服务器的情况下,同样可以通过设置JAVA_OPTS来完成。

它将有助于外部化可以在部署中更改的属性。

你可以使用setLevel ()来设置日志级别。

这些级别对于轻松设置希望程序显示的信息类型非常有用。

例如:

Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages

可能的级别集是:

跟踪,

调试、

信息,

警告说,

错误和

致命的

根据日志服务手册

您可以设置log4j的位置。在Java应用程序中使用:

org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)

更多信息可在这里获得:https://logging.apache.org/log4j/1.2/manual.html

为了启用-Dlog4j.debug,我转到系统,高级系统设置,环境变量并将系统变量_JAVA_OPTIONS设置为-Dlog4j.debug

我已经在hibernate.cfg.xml文件旁边的资源文件夹中创建了文件log4j . properties,并用下面的文本填充它:

log4j.rootLogger=INFO, CONSOLE


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

现在我去掉了警告和错误

如前所述,有两种方法

首先是将这一行添加到你的main方法中:

BasicConfigurator.configure();

第二种方法是添加这个标准log4j。属性文件到你的类路径:

在采用第二种方法时,您需要确保正确地初始化了文件。

如。

Properties props = new Properties();


props.load(new FileInputStream("log4j property file path"));


props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

确保创建了存储日志文件所需的文件夹。

根据Apache Log4j FAQ页面:

为什么我看到一个关于“没有发现日志采集器的附件”的警告;和“请正确配置log4j”;?

当默认配置__ABC0和log4j.xml文件找不到和应用程序不执行显式配置时,就会发生这种情况。log4j使用Thread.getContextClassLoader().getResource()定位默认配置文件,不直接检查文件系统。知道放置log4j的适当位置。属性或log4j.xml需要理解所使用的类装入器的搜索策略。log4j不提供默认配置,因为在某些环境中可能禁止向控制台或文件系统输出。

基本上,警告没有找到记录器的附件意味着你正在使用log4j日志记录系统,但你还没有添加任何appeners(如FileAppender, ConsoleAppender, SocketAppender, SyslogAppender等)到你的配置文件或配置文件丢失。

有三种方法来配置log4j:使用属性文件(log4j.properties),使用XML文件和通过Java代码(rootLogger.addAppender(new NullAppender());)。

log4j.properties

如果你有属性文件(例如安装Solr时),你需要把这个文件放在你的类路径目录中。

类路径

下面是Linux中如何确定类路径值的一些命令建议:

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?

或从Java: System.getProperty("java.class.path")

Log4j XML

下面是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="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>


<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
  

</log4j:configuration>

Tomcat

如果你使用Tomcat,你可以把你的log4j.properties放在: /usr/share/tomcat?/lib//var/lib/tomcat?/webapps/*/WEB-INF/lib/文件夹中。

Solr

作为参考,Solr默认的log4j.properties文件如下:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender


log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n


#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9


#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n


log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN


# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

为什么log4j不能在J2EE或WAR应用程序中找到我的属性文件?

简单的回答是:log4j类和属性文件不在同一个类加载器的范围内。

Log4j只使用默认的Class.forName()机制来加载类。资源的处理类似。更多细节请参见java.lang.ClassLoader的文档。

因此,如果遇到问题,请尝试自己加载类或资源。如果您找不到它,那么log4j也找不到。;)


参见:

另一种不将属性文件放在类路径上的方法是直接从java代码中设置属性。下面是示例代码。

public class Log4JSample {


public static void main(String[] args) {
Properties properties=new Properties();
properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
properties.setProperty("log4j.rootCategory","TRACE");


properties.setProperty("log4j.appender.stdout",     "org.apache.log4j.ConsoleAppender");
properties.setProperty("log4j.appender.stdout.layout",  "org.apache.log4j.PatternLayout");
properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");


properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
properties.setProperty("log4j.appender.MyFile.layout",  "org.apache.log4j.PatternLayout");
properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");


PropertyConfigurator.configure(properties);


Logger logger = Logger.getLogger("MyFile");


logger.fatal("This is a FATAL message.");
logger.error("This is an ERROR message.");
logger.warn("This is a WARN message.");
logger.info("This is an INFO message.");
logger.debug("This is a DEBUG message.");
logger.trace("This is a TRACE message.");
}

简单地说,创建log4j。src/main/assembly文件夹下的属性。根据您希望日志消息显示在控制台中还是显示在您修改的文件中。下面的代码将在控制台中显示您的消息。

# Root logger option
log4j.rootLogger=INFO, stdout


# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

尝试将log4j:configuration节点中的调试属性设置为true。

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

它在读取配置文件时输出信息,并用于配置log4j环境。你可能会得到更多细节来解决你的问题。

import org.apache.log4j.BasicConfigurator;

调用这个方法

BasicConfigurator.configure();

这是使用.yaml的另一种方法

逻辑结构:

Configuration:
Properties:
Appenders:
Loggers:

示例:

Configutation:
name: Default


Properties:
Property:
name: log-path
value: "logs"


Appenders:


Console:
name: Console_Appender
target: SYSTEM_OUT
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"


File:
name: File_Appender
fileName: ${log-path}/logfile.log
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"


Loggers:


Root:
level: debug
AppenderRef:
- ref: Console_Appender


Logger:
- name: <package>.<subpackage>.<subsubpackage>.<...>
level: debug
AppenderRef:
- ref: File_Appender
level: error

裁判:Log4j 2配置:使用yaml

__abc0 - __abc1

java.util.logging .log«提供Java平台核心日志工具的类和接口。


<强> < em > Log4j 1. x < / em > < / >强«log4j是一个流行的基于java的日志记录实用程序。Log4j是一个基于许多作者工作的开放源码项目。它允许开发人员通过使用Appenders[控制台,文件,DB和电子邮件]来控制哪些日志语句输出到不同的位置。它可以在运行时使用外部配置文件进行完全配置。

Log4j有三个主要组件:

  • __abc0 -[关闭,致命,错误,警告,信息,调试,跟踪]
  • < p >输出源

    李< /引用> < / >
  • 布局- [PatternLayout, EnhancedPatternLayout]

配置文件可以用XML或Java属性(key=value)格式编写。

  1. log4j_External。Java属性(键=值)格式
开头“$ {”和结尾“”之间的字符串被解释为一个键。替换变量的值可以定义为系统属性,也可以定义为配置文件本身。 设置附加器特定的选项。«log4j.appender.appenderName。

. option=value,对于每个命名的appender,你可以配置它的布局
log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql


#log.path=./
log.path=E:/Logs


# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n


# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}


# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}


# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}


# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}


# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');


# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
log.mongoDB.password=Yash@123
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs


log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED

logdata的表结构

CREATE TABLE IF NOT EXISTS `logdata` (
`Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
`DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`LineNumber` int(10) NOT NULL,
`Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  1. log4j_External.xml«XML log4j:配置公共DTD文件 . XML
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">


<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="target" value="System.out" />
<param name="threshold" value="debug" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>


<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="file" value="E:/Logs/logFile.log" />
<param name="append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>


<appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="E:/Logs/logRollingFile.log" />
<param name="immediateFlush" value="true"/>
<param name="maxFileSize" value="100KB" />
<param name="maxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
</layout>
</appender>


<appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="E:/Logs/logRollingDayFile.log" />
<param name="datePattern" value="'_'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
</layout>
</appender>


<root>
<priority value="info" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
<appender-ref ref="FILE_PER_SIZE" />
<appender-ref ref="FILE_PER_DAY" />
</root>
</log4j:configuration>

  1. Log4j配置从URL在Java程序:

为了使用外部文件指定自定义配置,所使用的类必须实现< em > < / em >配置器接口. xml

当默认配置文件“log4j. exe”时。属性”、“log4j.xml”不可用

public class LogFiles {
// Define a static logger variable so that it references the Logger instance named "LogFiles".
static final Logger log = Logger.getLogger( LogFiles.class );


@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier");


String fileName = //"";
//"log4j_External.xml";
"log4j_External.properties";
String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;


if( fileName.contains(".xml") ) {
DOMConfigurator.configure( configurationFile );
log.info("Extension *.xml");
} else if ( fileName.contains(".properties") ) {
PropertyConfigurator.configure( configurationFile );
log.info("Extension *.properties");
} else {
DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd");


PatternLayout layout = new PatternLayout();
layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
dailyRollingAppender.setLayout(layout);


dailyRollingAppender.activateOptions();


Logger rootLogger = Logger.getRootLogger();
rootLogger.setLevel(Level.DEBUG);
rootLogger.addAppender(dailyRollingAppender);


log.info("Configuring from Java Class.");
}


log.info("Console.Message.");
method2();
methodException(0);
}


static void method2() {
log.info("method2 - Console.Message.");
}
static void methodException(int b) {
try {
int a = 10/b;
System.out.println("Result : "+ a);
log.info("Result : "+ a);
} catch (Exception ex) { // ArithmeticException: / by zero
log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex)));
}
}
public static String stackTraceToString(Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
return sw.toString();
}
}

对于测试,包括设置日志级别的快速脏方法:

org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);


// set to Level.DEBUG for full, or Level.OFF..

对我来说,解决办法是添加“log4j”。将“属性”放入“src”文件夹。

Maven的解决方案:

我遇到了所有与上面相同的问题,对于maven解决方案,我使用了2个依赖项。如果您希望一个简单的项目使用一个标准配置的日志记录器,那么此配置仅用于快速测试。我可以想象,如果您需要更多信息或调整自己的日志级别,您稍后会想要制作一个配置文件。

    <properties>
<slf4jVersion>1.7.28</slf4jVersion>
</properties>


<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4jVersion}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>${slf4jVersion}</version>
</dependency>

我就这么做了,问题就解决了。

关注下面的博客

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j-WARN-console-messages-when-running-an-Application-inside-IntelliJ-Idea

但是这里他说像下面这样

要修复这个问题,只需输入下面的log4j。资源文件到项目的main/ Resources文件夹

而不是创建log4j。资源,创建log4j.properties。右键单击IntelliJ中的资源-> New -> Resource Bundle -将其命名为log4j

如果在资源测试文件夹中添加了log4j.propertieslog4j.xml文件后,Intellij IDEA仍然存在此错误,可能Intellij IDEA还没有意识到该文件的存在。

因此,在添加文件后,右键单击该文件并选择重新编译log4j.xml