max*_*mus 341 java eclipse log4j
我已经将log4j放到我的buildpath中,但是当我运行我的应用程序时收到以下消息:
log4j:WARN No appenders could be found for logger (dao.hsqlmanager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Run Code Online (Sandbox Code Playgroud)
这些警告意味着什么?什么是appender在这里?
mab*_*aba 424
该指南将为您提供有关如何使用记录器和追加器的一些信息.
只是为了让你前进,你可以采取两种简单的方法.
首先是将此行添加到main方法:
BasicConfigurator.configure();
Run Code Online (Sandbox Code Playgroud)
第二种方法是将此标准log4j.properties(取自上述指南)文件添加到您的类路径:
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Run Code Online (Sandbox Code Playgroud)
JDJ*_*JDJ 73
看起来您需要将log4j.properties文件的位置添加到Eclipse中的Classpath.
确保您的项目在Eclipse中打开,然后单击Eclipse顶部的"运行"菜单并单击以下内容:
不应再出现错误消息.
小智 44
快速解决方案
将代码添加到main函数:
String log4jConfPath = "/path/to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
Run Code Online (Sandbox Code Playgroud)在/ path/to创建一个名为log4j.properties的文件
log4j.rootLogger=INFO, 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{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
Run Code Online (Sandbox Code Playgroud)ken*_*orb 34
这只是一个警告.
出现这种情况的默认配置文件时log4j.properties,并log4j.xml不能发现和应用程序执行没有明确的配置.
要解决这个问题,只需创建/复制log4j.properties或log4j.xml进入类路径中的某个位置(通常与jar文件相同).
可选择设置java选项:-Dlog4j.configuration=file:///path/to/log4j.properties.
log4j用于Thread.getContextClassLoader().getResource()查找默认配置文件,而不是直接检查文件系统.知道要放置的适当位置log4j.properties或log4j.xml需要了解正在使用的类加载器的搜索策略.log4j不提供默认配置,因为在某些环境中可能禁止输出到控制台或文件系统.
对于调试,您可以尝试使用-Dlog4j.debug=true参数.
log4j.properties示例配置log4j.properties:
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN
Run Code Online (Sandbox Code Playgroud)
这是另一个使用多个appender的配置文件:
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
Run Code Online (Sandbox Code Playgroud)
如果使用Solr,请复制<solr>/example/resources/log4j.properties到类路径上的某个位置.
log4j.properties来自Solr的示例配置如下:
# 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
Run Code Online (Sandbox Code Playgroud)
也可以看看:
首先:创建一个log4j.properties文件
# 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
Run Code Online (Sandbox Code Playgroud)
将其放在 src/main/resources/ 中
之后,使用这两个依赖项:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
有必要将此最终依赖项添加到 POM 文件中:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
小智 7
如前所述,有两种方法
首先是将此行添加到main方法:
BasicConfigurator.configure();
Run Code Online (Sandbox Code Playgroud)
第二种方法是将此标准log4j.properties文件添加到您的类路径:
在采用第二种方法时,您需要确保正确初始化文件,例如.
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");
Run Code Online (Sandbox Code Playgroud)
确保创建所需的文件夹以存储日志文件.
这里的大多数答案都建议将log4j.properties文件放在正确的位置(对于maven项目,它应该位于src/main/resources)
但对我来说,问题是我的log4j.properties配置不正确.这是一个适合我的样本,你可以先试试.
# 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
Run Code Online (Sandbox Code Playgroud)
小智 6
当我尝试运行 JUnit 测试类时,我遇到了同样的问题。
在 src/test/resources 文件夹中手动添加 log4j.properties 文件后,问题得到解决。
将以下代码添加到 log4j.properties 文件解决了该问题:
# Root logger option
log4j.rootLogger=INFO, file, stdout
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# 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
Run Code Online (Sandbox Code Playgroud)
我犯了同样的错误.这里导致此错误消息的问题:
在配置log4j之前,我创建了一些使用Logger的对象:
Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);
Run Code Online (Sandbox Code Playgroud)
解决方案:在main方法的开头配置log4j:
PropertyConfigurator.configure(xmlLog4JConfigFile);
// or BasicConfigurator.configure(); if you dont have a config file
Run Code Online (Sandbox Code Playgroud)
我认为您应该了解 log4j jar 文件或 Java 代码在哪里查找 log4j 配置文件。
src/main/resources/log4j.properties是 Eclipse 路径。将它们放在适当的位置,这样您就不必在代码中硬编码绝对路径。
阅读我的文章和示例解决方案 https://askyourquestions.info/how-to-see-where-the-log-is-logger-in-slf4j/
小智 5
确保正确设置属性文件。再说一次,似乎编译器找不到属性文件,可以在pom上设置如下(仅当使用maven项目时)。
<build>
<sourceDirectory> src/main/java</sourceDirectory>
<testSourceDirectory> src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>resources</directory>
</resource>
</resources>
</build >
Run Code Online (Sandbox Code Playgroud)
添加以下作为第一个代码:
Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(prop);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
599002 次 |
| 最近记录: |