当前位置: 首页 > 面试题库 >

如何重新执行Log4j“默认初始化过程”?

濮波
2023-03-14
问题内容

在运行时,我经常创建/修改 log4j Logger,Appenders,Levels,Layouts,并且有时需要将所有内容重置为默认值。

Log4j 系统具有定义明确的
默认初始化过程 ,该
过程 在将
log4j 类加载到内存时执行。有什么方法可以稍后在运行时以编程方式重新执行整个过程吗?

resetConfiguration()log4j 文档中找到了几种方法,但是不确定它们中的任何一种是否可以执行
默认初始化过程所
要做的工作:

  • BasicConfigurator.resetConfiguration();
  • Hierarchy.resetConfiguration();
  • LogManager.resetConfiguration();

欢迎提供有关重置 log4j 配置的其他建议!谢谢。


问题答案:

根据该方法的文档doConfigure

从文件中读取配置。 现有配置不会清除或重置 。如果您需要其他行为,
resetConfiguration在调用doConfigure之前先调用method

因此,我相信使用与启动时相同的文件进行调用LogManager.resetConfiguration()和重新调用PropertyConfigurator.configure()将满足您的要求。

resetConfiguration()方法记录在Hierarchy类中。



 类似资料:
  • 问题内容: Log4j的默认初始化通过查找和使用URL进行配置的过程。然后,您如何找出最终使用的URL,而不必自己编写相同的过程?(如果您必须自己编写代码,则可能无法获得与log4j完全相同的代码,并且在将来的发行版中它可能会更改。) 问题答案: 如果您愿意使用AspectJ LTW(加载时编织),则可以看看Ian Roberts提到的静态初始化。在 log4j 1.2.14中, 它看起来像这样:

  • 考虑以下代码 VS2013编译器发出以下警告: 警告C4351:新行为:数组“B::member”的元素将默认初始化1 这里有记载 使用C 11,并应用“默认初始化”的概念,意味着B. part的元素将不会被初始化。 但我认为,成员{}应该执行值初始化,而不是默认初始化。VS2013编译器是否损坏? 8.5美元/6 默认初始化类型为T的对象意味着:-如果T是(可能是cv限定的)类类型(第9条),则

  • 问题内容: 将log4j添加到我的应用程序后,每次执行我的应用程序时,都会得到以下输出: 看来这意味着缺少配置文件。此配置文件应位于何处,什么是良好的入门内容? 我使用纯Java开发桌面应用程序。因此没有网络服务器等… 问题答案: 默认情况下,在上查找名为或的文件。 您可以按照此处所述通过设置系统属性来控制它用来初始化自身的文件(查找“默认初始化过程”部分)。 例如: 将导致在类路径上查找名为的文

  • 问题内容: 是否可以在运行时重新初始化Spring Bean? 我的Bean使用静态设置,在某些情况下会更改,然后我必须重新初始化Bean。 问题答案: 你可以通过三种方法在spring上下文中更新单例bean,可以选择一种适合你的用例: 在Bean中重新加载方法在Bean中 创建一个方法,该方法将更新/重新加载其属性。根据你的触发器,从spring上下文访问bean,然后调用reload方法更新

  • 我的Bean使用静态设置,在某些情况下,这些设置会改变,然后我必须重新初始化Bean。

  • 我在Visual Studio2019中有一个Xamarin表单解决方案。我现在只使用Android版本。完整的错误是: 在此进程中,java.lang.IllegalStateException Message=Default FirebaseApp未初始化AppCardView.Sample.android。确保首先调用FirebaseApp.InitializeApp(上下文)。 在我的An