在运行时设置文件追加器日志路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在运行时设置文件追加器日志路径相关的知识,希望对你有一定的参考价值。

  1. import com.alphacsp.common.log.Log;
  2. import org.apache.log4j.Category;
  3. import org.apache.log4j.FileAppender;
  4. import org.apache.log4j.AppenderSkeleton;
  5.  
  6. import java.lang.reflect.Field;
  7. import java.util.Enumeration;
  8.  
  9. public class FileAppenderManipulation {
  10.  
  11. public void setAppenderFilenameForLogger(Log log, String filename, String appenderName) {
  12. try {
  13. Category category = getCategory(log);
  14. final FileAppender fileAppender = (FileAppender) locateAppender(category, appenderName);
  15. fileAppender.setFile(filename);
  16. fileAppender.activateOptions();
  17. } catch (NoSuchFieldException e) {
  18. e.printStackTrace();
  19. } catch (IllegalAccessException e) {
  20. e.printStackTrace();
  21. }
  22.  
  23. }
  24.  
  25. private AppenderSkeleton locateAppender(Category category, String name) {
  26. do {
  27. final Enumeration appenders = category.getAllAppenders();
  28. while (appenders.hasMoreElements()) {
  29. AppenderSkeleton appenderSkeleton = (AppenderSkeleton) appenders.nextElement();
  30. if (appenderSkeleton.getName().equals(name)) {
  31. return appenderSkeleton;
  32. }
  33. }
  34. } while ((category = category.getParent()) != null);
  35. throw new RuntimeException("The requested appender dosn't exists!");
  36. }
  37.  
  38. private Category getCategory(Log log) throws NoSuchFieldException, IllegalAccessException {
  39. Field field = log.getClass().getDeclaredField("category");
  40. field.setAccessible(true);
  41. Category category = (Category) field.get(log);
  42. return category;
  43. }
  44. }

以上是关于在运行时设置文件追加器日志路径的主要内容,如果未能解决你的问题,请参考以下文章

在追加打开文件时,如何为 file.write 创建要遵循的路径

解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以及tomcat日志乱码]

解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以及tomcat日志乱码]

在Windows批处理中运行命令时管道Unity CLI编译日志文件

如何在运行时获取 Java 应用程序的真实路径?

运行 UI 自动化测试时如何忽略/停止推送器从日志记录到控制台