自动将日志文件附加到支持电子邮件中会很有用。我可以按程序设置路径(如在程序中设置Logback Appender路径),但我更愿意让用户通过熟悉的方式通过logback.xml
配置日志记录。所以,我可以找到logback用于记录的文件吗?
自动将日志文件附加到支持电子邮件中会很有用。我可以按程序设置路径(如在程序中设置Logback Appender路径),但我更愿意让用户通过熟悉的方式通过logback.xml
配置日志记录。所以,我可以找到logback用于记录的文件吗?
您可以获取特定上下文中所有附加程序的列表。要做到这一点:
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
for (Logger logger : context.getLoggerList()) {
for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
Appender<ILoggingEvent> appender = index.next();
}
}
这个循环遍历当前上下文中所有记录器的所有附加程序列表。@tafoo85的答案是正确的,但它只会给你附加器。
更具体地说,要获取Logback Logger使用的文件,我希望下面的代码能帮助一些人。
File clientLogFile;
FileAppender<?> fileAppender = null;
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
for (Logger logger : context.getLoggerList())
{
for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders();
index.hasNext();)
{
Object enumElement = index.next();
if (enumElement instanceof FileAppender) {
fileAppender=(FileAppender<?>)enumElement;
}
}
}
if (fileAppender != null) {
clientLogFile=new File(fileAppender.getFile());
}
else {
clientLogFile = null;
}
Log.d("logfile path", clientLogFile.getAbsolutePath());
Object enumElement = index.next();
更改为 Appender<ILoggingEvent> enumElement= index.next();
以及 fileAppender = (FileAppender<?>) enumElement;
更改为 fileAppender = (FileAppender<ILoggingEvent>) enumElement;
使其适用于我的需求。 - daniel.kahlenberg您可以按如下方式获取实际文件:
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) {
for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) {
Appender<ILoggingEvent> appender = index.next();
if (appender instanceof FileAppender) {
FileAppender<ILoggingEvent> fa = (FileAppender<ILoggingEvent>)appender;
ResilientFileOutputStream rfos = (ResilientFileOutputStream)fa.getOutputStream();
File file = rfos.getFile();
System.out.println(file.getAbsolutePath());
}
}
}