【问题标题】:Glassfish 3 + ear + logback.xmlGlassfish 3 + 耳朵 + logback.xml
【发布时间】:2011-12-29 13:14:19
【问题描述】:

我在包含 JAR (ejb) 和 WAR 的 EAR 文件中使用 logback。这应该在 Glassfish v3 服务器上运行。一切正常,除了加载 logback.xml。找不到这个。 我用 Netbeans 构建项目。使用的外部库位于 EAR 的 lib-Directory 中(它们所在的位置不应该有所不同......)。我计划将 logback.xml-File 放在根目录或 EAR 中的另一个子目录中。 Classpath 在 JAR 和 WAR 的 Manifest-Files 中设置。但由于某些原因,找不到 logback.xml...(构建耳朵包含 logback.xml ;))

我已经尝试了 logback.xml 的每个位置。即使在 WAR 或 JAR 中。没有任何效果...

如果我使用独立的 WAR,那么一切正常,并且找到了 logback.xml。 (好的。不是所有的。更改清单中的类路径不起作用......)

所以我的问题:是否有人已经让 logback.xml 在 EAR 中运行?

这是我的清单(我希望这是正确的语法):

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.2 
Created-By: 1.7.0_147-icedtea-b147 (Oracle Corporation) 
Class-Path: ./ 

希望有人可以帮助我。

问候

【问题讨论】:

  • 注意:您可能想使用 Glassfish 自己的日志记录。然后你需要 JDK14 slf4j 模块而不是 logback。这就是我们使用的
  • 我使用 logback 和 slf4j 作为后端。
  • 另外请注意,您可以将侦听器附加到 logback,以便查看它在哪里查找配置文件。这可能会对您有所帮助。
  • 这是一个很好的提示。我试试看。

标签: jsf glassfish ear logback


【解决方案1】:

我解决了这个问题,创建了一个单独的简单 jar,我在 EAR 中展开部署(使用 Maven 和一个单独的模块 config.jar)。 在实践中,logback.xml 被插入到 lib/config.jar/logback.xml 中

【讨论】:

  • 因此,您实际上是在所有部署通用的类路径中放置了一个新 jar。根据我的经验,这是查看已部署工件的唯一方法。请注意,如果您需要集群,应用服务器无法帮助您集中日志。
【解决方案2】:

我找到了一个解决方案,无需在类路径中放置另一个 jar。 1) 只需将 logback.xml 放入 war 应用程序的类路径中(例如 /src/java/); 2) 使用 ServletContextListener 使用 getResourceAsStream 加载文件,并最终设置一些参数(如应用程序名称),如下所示:

@Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Logback contextInitialized !!!!");
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
        JoranConfigurator jc = new JoranConfigurator(); 
        jc.setContext(context); context.reset(); 
        // override default configuration 
        // inject the name of the current application as "application-name" 
        // property of the LoggerContext 
        context.putProperty("application-name", "menu_dinamico"); 
        try { 
            InputStream is = getClass().getClassLoader().getResourceAsStream("logback.xml");
            if(is == null) {
                System.out.println("Logback xml file non trovato");
            }
            else {
                jc.doConfigure(is);
            }
        } catch (JoranException ex) {
            System.out.println("Logback contextInitialized error");
            StatusPrinter.print(context);
            ex.printStackTrace();
        }
    }

现在文件 logback.xml 已被识别。

【讨论】:

  • 嗨 Maxqua72,我听从了你的建议,在 EAR 级别的 logback 配置上做了同样的事情。试图操纵我的类路径条目或改变耳朵结构在副作用方面要复杂得多!
  • 此解决方案有效,但请注意配置将在启动后加载。因此,如果您在启动之前配置了任何其他类(例如,JPA、Quartz、Spring 等),它们将登录到控制台中进行调试,直到部署完成。最后我选择了接受的答案解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
相关资源
最近更新 更多