Java 找不到记录器(log4j)的附加器?
我已经将log4j放在我的构建路径中,但是当我运行我的应用程序时,我得到以下消息:Java 找不到记录器(log4j)的附加器?,java,eclipse,log4j,Java,Eclipse,Log4j,我已经将log4j放在我的构建路径中,但是当我运行我的应用程序时,我得到以下消息: 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.
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.
这些警告意味着什么?这里的appender是什么?您可以使用代码中的
记录器来记录消息。Appender
是附加到Logger
的对象,用于将消息写入特定目标。有FileAppender
写入文本文件,也有consoleApender
写入控制台。您需要显示记录器和Appender设置的代码以获得更多帮助
请阅读以更好地理解记录器和附加器的交互作用。本指南有点旧,但仍然有效
该指南将为您提供有关如何使用记录器和附加器的一些信息
为了让你走下去,你可以采取两种简单的方法
第一种方法是将这一行添加到主方法中:
PropertyConfigurator.configure(xmlLog4JConfigFile);
// or BasicConfigurator.configure(); if you dont have a config file
BasicConfigurator.configure();
String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
BasicConfigurator.configure();
第二种方法是将这个标准的log4j.properties
(取自上述指南)文件添加到类路径中:
#将根记录器级别设置为DEBUG,并将其唯一的附加器设置为A1。
log4j.rootLogger=DEBUG,A1
#A1被设置为ConsolePender。
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#A1使用图形布局。
log4j.appender.A1.layout=org.apache.log4j.patternalyout
log4j.appender.A1.layout.ConversionPattern=%-4r[%t]-5p%c%x-%m%n
我得到了同样的错误。以下是导致此错误消息的问题:
在配置log4j之前,我创建了一些使用记录器的对象:
Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);
解决方案:
在main方法的开头配置log4j:
PropertyConfigurator.configure(xmlLog4JConfigFile);
// or BasicConfigurator.configure(); if you dont have a config file
BasicConfigurator.configure();
String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
看起来您需要在Eclipse中将log4j.properties
文件的位置添加到类路径中
确保您的项目在Eclipse中处于打开状态,然后单击Eclipse顶部的“运行”菜单并单击以下内容:
java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2
跑
运行配置
类路径(选项卡)
用户条目
高级(右侧按钮)
添加文件夹
然后导航到包含log4j.properties文件的文件夹
申请
跑
错误消息不应再出现。快速解决方案:
将代码添加到主功能中:
String log4jConfPath = "/path/to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
在/path/to
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
我在Intellij12中尝试用maven构建可执行jar时遇到了这个问题。事实证明,由于java清单文件不包含类路径,因此在根级别(执行jar文件的地方)找不到log4j属性文件
仅供参考,我得到的记录器如下:
Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);
我能够让它与一个pom文件一起工作,其中包括:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.mycompany.mainPackage.mainClass</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found -->
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven汇编插件
2.2-β-5
真的
com.mycompany.mainPackage.mainClass
.
带有依赖项的jar
组装
包裹
单一的
如前所述,有两种方法
第一种方法是将这一行添加到主方法中:
PropertyConfigurator.configure(xmlLog4JConfigFile);
// or BasicConfigurator.configure(); if you dont have a config file
BasicConfigurator.configure();
String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
第二种方法是将此标准log4j.properties文件添加到类路径:
在采用第二种方法时,您需要确保正确初始化文件,
例如
确保您创建了存储日志文件所需的文件夹。这只是一个警告
固定
当无法找到默认配置文件log4j.properties
和log4j.xml
且应用程序未执行显式配置时,会发生这种情况
要解决这个问题,只需将log4j.properties
或log4j.xml
创建/复制到类路径上的a位置(通常与jar文件相同)
可选设置java选项:-Dlog4j.configuration=file:///path/to/log4j.properties
log4j
使用Thread.getContextClassLoader().getResource()
定位默认配置文件,而不直接检查文件系统。要知道放置log4j.properties
或log4j.xml
的适当位置,需要了解正在使用的类加载器的搜索策略log4j
不提供默认配置,因为在某些环境中可能禁止向控制台或文件系统输出
调试
对于调试,您可以尝试使用-Dlog4j.debug=true
参数
log4j.属性的配置
log4j.属性的示例配置
:
# 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
compile 'log4j:log4j:1.2.17'
compile 'org.slf4j:slf4j-log4j12:1.7.25'
下面是另一个使用多个附加器的配置文件:
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
阿帕奇索尔
如果使用Solr,请将/example/resources/log4j.properties
复制到类路径上的一个位置
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
另见:
确保您的项目在Eclipse中打开,然后单击Eclipse顶部的“运行”菜单并单击以下内容:
java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2
跑
运行配置
类路径(选项卡)
用户条目
在右边添加jar
添加log4jjar文件
申请
跑
错误消息应该不再出现。我认为您应该了解log4j jar文件或Java代码在哪里查找log4j配置文件
src/main/resources/log4j.properties
是Eclipse路径。
把它们放在适当的地方
import org.apache.log4j.PropertyConfigurator;
String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
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
# This sets the global logging level and specifies the appenders
log4j.rootLogger=INFO, theConsoleAppender
# settings for the console appender
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.rootLogger=file
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false
log4j.rootLogger=FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false
# 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
# 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
<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>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
java [ options ] -jar file.jar [ arguments ]
java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2
1.Run/Debug Configurations
2.Edit configurations...
3.VM options
4.Enter the same value also starting with "-D"
compile 'log4j:log4j:1.2.17'
compile 'log4j:log4j:1.2.17'
compile 'org.slf4j:slf4j-log4j12:1.7.25'
compile 'log4j:log4j:1.2.17'
compile 'org.slf4j:slf4j-log4j12:1.7.25'
compile 'commons-logging:commons-logging:1.2'