是否可以通过编程方式找到回溯日志文件?

将日志文件自动附加到支持电子邮件会很有用。 我可以以编程方式设置路径(如以编程方式设置Logback Appender路径 ),但我更愿意让用户通过logback.xml以熟悉的方式配置日志记录。 那么,我可以找到logback用于记录的文件吗?

您可以在特定上下文中获取所有appender的列表。 去做这个:

 LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory(); for (Logger logger : context.getLoggerList()) { for (Iterator> index = logger.iteratorForAppenders(); index.hasNext();) { Appender appender = index.next(); } } 

这将迭代当前上下文的所有记录器中的所有appender列表。

@ tafoo85给出的答案是正确的,但它只会给你appenders。

为了更具体的获取Logback logger使用的文件,我希望下面的代码可以帮助一些人。

 File clientLogFile; FileAppender fileAppender = null; LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory(); for (Logger logger : context.getLoggerList()) { for (Iterator> 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()); 

您可以像这样获取实际文件:

  LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory(); for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) { for (Iterator> index = logger.iteratorForAppenders(); index.hasNext();) { Appender appender = index.next(); if (appender instanceof FileAppender) { FileAppender fa = (FileAppender)appender; ResilientFileOutputStream rfos = (ResilientFileOutputStream)fa.getOutputStream(); File file = rfos.getFile(); System.out.println(file.getAbsolutePath()); } } }