log4j appender 问题 - 无法打印调试、错误级别
log4j appender issue - unable to print debug, error levels
我正在使用 log4j 进行日志记录。
这就是我的 log4j.properties 的样子
# Root logger option
log4j.rootLogger=info, debug, error file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log
log4j.appender.file.File=C:\Users\raj_sanpui\Desktop\Automation\test.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
我的每个 Java 文件构造函数都有这个调用:
public class IMGOperations {
private org.apache.log4j.Logger log;
private String hostname;
private String sysid;
private String dicomfilepath;
public IMGOperations(String hostname, String sysid, String dicomfilepath)
{
this.hostname=hostname;
this.sysid=sysid;
this.dicomfilepath=dicomfilepath;
PropertyConfigurator.configure(mainConfig.LOG4JCONFPATH);
log = Logger.getLogger(mainConfig.class);
}
我在 运行 我的 Java 程序上收到此错误:
log4j:ERROR Could not find value for key log4j.appender.debug
log4j:ERROR Could not instantiate appender named "debug".
log4j:ERROR Could not find value for key log4j.appender.error file
log4j:ERROR Could not instantiate appender named "error file".
log4j:ERROR Could not find value for key log4j.appender.debug
我基本上是一个 C/C++ 人,知道 Core Java,并且在这方面几乎是个菜鸟。所以,如果您觉得它太基础,请原谅我。
问题出在你的第二行,应该是:
# Root logger option
log4j.rootLogger=INFO, stdout, file
这意味着您将在 INFO 级别登录,并为 stdout 和文件实例化 log4j appender。不用说,INFO 可以切换为任何其他日志记录级别(TRACE、DEBUG、INFO、WARN、ERROR、FATAL)。
编辑:
log4j.rootLogger 需要 2 个或更多参数。第一个参数是日志记录级别,后面的任何参数都是 log4j 附加程序的名称。您看到了您在问题中提出的错误,因为没有名称为 "debug" 或 "error file" 的附加程序,如以下行所述:
log4j:ERROR Could not find value for key log4j.appender.debug
log4j:ERROR Could not find value for key log4j.appender.error file
编辑 2:
给定以下配置文件:
# Root logger option
log4j.rootLogger=info, debug, error file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log
log4j.appender.file.File=C:\Users\raj_sanpui\Desktop\Automation\test.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
Log4j 期望为 "debug" 和 "error file" 定义 appender,但是,您只为 "file" 定义了 appender。您已经像这样定义了您的 appender:
log4j.rootLogger=info, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
要使用名为 "debug" 的附加程序,您需要另一行类似的代码:
log4j.rootLogger=info, debug
log4j.appender.debug=org.apache.log4j.RollingFileAppender
您在 log4j.rootLogger 属性 中声明的 appender 与您的 appender 定义之间应该存在一对一的映射。
如果您像这样思考每个属性,可能会有所帮助:
log4j.appender.file => create new file appender object
log4j.appender.file.File => set the file property of the file appender
log4j.appender.file.MaxFileSize => set the max file size of the file appender
log4j.appender.file.MaxBackupIndex => set the max backup index property of the file appender
log4j.appender.file.layout => set the layout of the file appender
etc...
您在 rootLogger
中遇到问题,您应该只有一个日志记录级别,例如 DEBUG, INFO, ERROR etc..
在您的情况下您有多个日志记录级别,第二件事您没有声明 file
appender 在你的 rootLogger
但你在其余的片段中使用了它。
# Root logger option
log4j.rootLogger=info, debug, error file
上面的片段应该是这样的log4j.rootLogger= INFO, file
看看这个link
我正在使用 log4j 进行日志记录。
这就是我的 log4j.properties 的样子
# Root logger option
log4j.rootLogger=info, debug, error file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log
log4j.appender.file.File=C:\Users\raj_sanpui\Desktop\Automation\test.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
我的每个 Java 文件构造函数都有这个调用:
public class IMGOperations {
private org.apache.log4j.Logger log;
private String hostname;
private String sysid;
private String dicomfilepath;
public IMGOperations(String hostname, String sysid, String dicomfilepath)
{
this.hostname=hostname;
this.sysid=sysid;
this.dicomfilepath=dicomfilepath;
PropertyConfigurator.configure(mainConfig.LOG4JCONFPATH);
log = Logger.getLogger(mainConfig.class);
}
我在 运行 我的 Java 程序上收到此错误:
log4j:ERROR Could not find value for key log4j.appender.debug
log4j:ERROR Could not instantiate appender named "debug".
log4j:ERROR Could not find value for key log4j.appender.error file
log4j:ERROR Could not instantiate appender named "error file".
log4j:ERROR Could not find value for key log4j.appender.debug
我基本上是一个 C/C++ 人,知道 Core Java,并且在这方面几乎是个菜鸟。所以,如果您觉得它太基础,请原谅我。
问题出在你的第二行,应该是:
# Root logger option
log4j.rootLogger=INFO, stdout, file
这意味着您将在 INFO 级别登录,并为 stdout 和文件实例化 log4j appender。不用说,INFO 可以切换为任何其他日志记录级别(TRACE、DEBUG、INFO、WARN、ERROR、FATAL)。
编辑:
log4j.rootLogger 需要 2 个或更多参数。第一个参数是日志记录级别,后面的任何参数都是 log4j 附加程序的名称。您看到了您在问题中提出的错误,因为没有名称为 "debug" 或 "error file" 的附加程序,如以下行所述:
log4j:ERROR Could not find value for key log4j.appender.debug
log4j:ERROR Could not find value for key log4j.appender.error file
编辑 2:
给定以下配置文件:
# Root logger option
log4j.rootLogger=info, debug, error file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log
log4j.appender.file.File=C:\Users\raj_sanpui\Desktop\Automation\test.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
Log4j 期望为 "debug" 和 "error file" 定义 appender,但是,您只为 "file" 定义了 appender。您已经像这样定义了您的 appender:
log4j.rootLogger=info, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
要使用名为 "debug" 的附加程序,您需要另一行类似的代码:
log4j.rootLogger=info, debug
log4j.appender.debug=org.apache.log4j.RollingFileAppender
您在 log4j.rootLogger 属性 中声明的 appender 与您的 appender 定义之间应该存在一对一的映射。
如果您像这样思考每个属性,可能会有所帮助:
log4j.appender.file => create new file appender object
log4j.appender.file.File => set the file property of the file appender
log4j.appender.file.MaxFileSize => set the max file size of the file appender
log4j.appender.file.MaxBackupIndex => set the max backup index property of the file appender
log4j.appender.file.layout => set the layout of the file appender
etc...
您在 rootLogger
中遇到问题,您应该只有一个日志记录级别,例如 DEBUG, INFO, ERROR etc..
在您的情况下您有多个日志记录级别,第二件事您没有声明 file
appender 在你的 rootLogger
但你在其余的片段中使用了它。
# Root logger option
log4j.rootLogger=info, debug, error file
上面的片段应该是这样的log4j.rootLogger= INFO, file
看看这个link