我在使用log4j进行日志记录时遇到问题。我创建了我的属性文件,并在Java代码中打开它,除了属性文件出现故障外,一切都很好。我在这里看了几个教程和问题,但我似乎无法解决它。这是我的属性文件(称为WSConnectorLog.properties):
##########################
# Loggers
log4J.rootLogger = FATAL, console
log4j.WSDetailedLogger = TRACE, WSDetailLog, console
log4j.WSAppLogger = INFO, WSAppLog, console
# Appenders
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.target=System.err
log4j.appender.console.layout.ConversionPattern=%d [%t] (%F:%L) %p %m%n
log4j.appender.WSDetailLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.WSDetailLog.File=logs/WSDetailed.log
log4j.appender.WSDetailLog.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.WSDetailLog.layout=org.apache.log4j.PatternLayout
log4j.appender.WSDetailLog.layout.ConversionPattern=%d [%t] (%F:%L) %-5p %m%n
log4j.appender.WSAppLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.WSAppLog.File=logs/ws.log
log4j.appender.WSAppLog.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.WSAppLog.layout=org.apache.log4j.PatternLayout
log4j.appender.WSAppLog.layout.ConversionPattern=%m%n
# Set root category priority to INFO and its only appender to console.
log4j.rootCategory=INFO, console
我在Java中使用它:
准备:
public class WSConnector {
private static Logger WSDetailedlog = Logger.getLogger("WSDetailedLogger");
private static Logger WSAppLog = Logger.getLogger("WSAppLogger");
private ConnectionManager cm = ConnectionManager.getInstance();
private ConfigHandler config = ConfigHandler.getInstance();
private SimpleDateFormat format = null;
/**
* Protected constructor for the Singleton pattern.
*/
protected WSConnector() {
format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Properties props = new Properties();
try {
props.load(getClass().getResourceAsStream("/WSConnectorLog.properties"));
} catch (IOException e) {
e.printStackTrace();
}
PropertyConfigurator.configure(props);
}
然后写信给:
...
WSDetailedlog.info(log);
...
WSAppLog.info("random string";
...
我收到以下错误:
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:WARN No appenders could be found for logger (WSDetailedLogger).
log4j:WARN Please initialize the log4j system properly.
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
log4j:ERROR Could not find value for key log4j.appender.CONSOLE
log4j:ERROR Could not instantiate appender named "CONSOLE".
我正在运行的环境是Tomcat 7.0。我在那里导出了jar,并将属性文件放在它旁边。我正在从Eclipse Dynamic WebApp项目中调用jar,以便它可以看到Tomcat的lib目录。问题不在于它找不到属性文件,而在于它以某种方式出现了格式错误。
你能看一下,帮助我理解这个问题吗?
答案 0 :(得分:0)
您不必指定控制台appender,您必须将其配置为日志级别,例如:
log4j.rootLogger=INFO, stdout
# Console appender configuration
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] (%F:%L) %p %m%n
log4j.appender.stdout.filter.b=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.stdout.filter.b.LevelToMatch=FATAL
log4j.appender.stdout.filter.b.AcceptOnMatch=false
这是我用于仅打印FATAL日志的配置。 希望它有所帮助!