JNDI属性在tinylog配置中的用法

时间:2019-05-17 12:13:56

标签: tinylog

我们使用JNDI-Property(在Tomcat Web服务器中设置)确定阶段(DEV / TEST / QA / PRD),以便配置一些应用程序详细信息。

现在,我们想用外部工具代替自制日志,并尝试使用tinylog。但是我们想知道是否可以从JNDI上下文中读取环境变量来配置tinylog设置吗?

该文档对JNDI查找没有任何说明。也许基于Java的配置可能是解决方案。但是基于文本的声明式配置呢?

有任何建议! 谢谢!

1 个答案:

答案 0 :(得分:0)

tinylog是适用于所有Java应用程序的通用日志记录库。由于上下文查询是Java EE的特定功能,因此它不提供本机支持。但是,您可以在启动时通过ServletContextListener加载自定义的tinylog配置。

@WebListener
public class LoggingInitializer implements ServletContextListener {

    public void contextInitialized(ServletContextEvent event) {
        try {
            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            String stage = (String) new InitialContext().lookup("java:comp/env/stage");
            String file = "tinylog_" + stage + ".properties";

            Properties configuration = new Properties();
            try (InputStream stream = classLoader.getResourceAsStream(file)) {
                configuration.load(stream);
            }

            Configuration.replace((Map) configuration);
        } catch (IOException | NamingException ex) {
            Logger.error(ex, "Failed to load tinylog configuration");
        }
    }

    public void contextDestroyed(ServletContextEvent event) { }

}

可以在您的context.xml中将该阶段设置为环境变量:

<Context>
    <Environment name="stage" value="PROD" type="java.lang.String" />
    <!-- Other Settings -->
</Context>