5 Replies Latest reply on Jan 27, 2014 1:44 PM by paulohbmelo

    Repository Selector no JBoss 7/6 EAP

    paulohbmelo

      Boa tarde pessoal, blz?

       

      Alguém já fez a solução do Repository Selector funcionar no JBoss 7/6 EAP?

       

      Eu precisaria ter o controle sobre o Repository Selector para conseguir separar os logs de minhas aplicações via classloaders. Usei esta solução no JBoss 4.2.3 e funcionou perfeitamente porém o JBoss 7 já seta o Repository Selector (e o guard) e não me deixa colocar o meu personalizado.

       

      Estou pesquisando bastante aqui e vi algumas outras soluções (como a de Logging Profile) mas, não resolve meu problema como a solução do Repository Selector.

       

      Agradeço desde já se puderem dar uma luz.

        • 1. Re: Repository Selector no JBoss 7/6 EAP
          rimolive

          Olá Paulo,

           

          Talvez sua pergunta precise de um contexto um pouco mais detalhado:

           

          * Qual o objetivo de separar os logs das aplicações via classloaders?

          * Você recebe algum erro no log ou simplesmente não aparece nada?

          * Tentou mudar a prioridade do log para DEBUG para tentar identificar a causa raiz do problema?

          * Poderia mostrar de onde você tirou a solução do Logging Profile?

          • 2. Re: Repository Selector no JBoss 7/6 EAP
            rimolive

            Olá Paulo,

             

            Conseguiu resolver o problema?

            • 3. Re: Repository Selector no JBoss 7/6 EAP
              paulohbmelo

              Boa tarde Ricardo! Desculpe a demora, não tinha visto a resposta.

               

              * Qual o objetivo de separar os logs das aplicações via classloaders?

              Na verdade não precisa ser via classloaders, resolvendo o meu problema. O lance é que a solução citada (Repository Selector) separava perfeitamente o log da aplicação. Daí eu implementei um adicional pegando toda e qualquer entrada inclusive para console (System.out e System.err) e jogando no log da aplicação. Precisamos disso pois, em nosso ambiente temos várias (dezenas) aplicações e deixar tudo logando no server.log não é nada legal (vira uma zona!).

               

              * Você recebe algum erro no log ou simplesmente não aparece nada?

              Não, na verdade, com a implementação modificada que fiz da Repository Selector, somente os logs enviados via Log4j (ex. Logger.getRootLogger().error("...")) vão parar nos logs das aplicações mas, os stacktraces de RuntimeExceptions, por exemplo, vão para o server.log. E no 4.2.3, tudo ia para o log da aplicação.

               

              * Tentou mudar a prioridade do log para DEBUG para tentar identificar a causa raiz do problema?

              Isso não adianta pois, o log está funcionando porém, só não separa da forma adequada.

               

              * Poderia mostrar de onde você tirou a solução do Logging Profile?

              Este é um exemplo: https://access.redhat.com/site/documentation//en-US/JBoss_Enterprise_Application_Platform/6.2/html/Administration_and_Configuration_Guide/Example_Logging_Profile_Configuration.html

               

              Eu quero pegar tudo que deu de erro na aplicação, independente se foi em pacotes da mesma ou de terceiros (por isso a solução usava classloaders)

               

              Conseguiu resolver o problema?

              Não.

              • 4. Re: Repository Selector no JBoss 7/6 EAP
                rimolive

                Olá Paulo,

                 

                Pelo que indica a documentação, é necessário adicionar um atributo Logging-Profile no seu MANIFEST.MF e depois criar as configurações no JBoss para esse Logging Profile. É exatamente isso que você fez e mesmo assim não deu certo, correto?

                 

                Sobre as stacktraces irem para o server.log, isso indica que sua aplicação deve chamar Exception.printStacktrace() e isso envia para o stdout (http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#printStackTrace()). Infelizmente, não há uma forma melhor de resolver isso sem ao menos passar o stacktrace via Log4J e portanto é necessário um refactoring das aplicações. Nota: Ainda assim qualquer RuntimeException irá para o server.log mas ao meu ver uma RuntimeException não seria um erro específico de aplicação e pode influenciar no servidor como um todo.

                 

                 

                Espero que tenha ajudado.

                1 of 1 people found this helpful
                • 5. Re: Repository Selector no JBoss 7/6 EAP
                  paulohbmelo

                  Olá Ricardo! Obrigado pela resposta.

                   

                  Na verdade eu não cheguei a implementá-la mas, só a analisei o que seria o resultado. Pelo que vi, a solução de Logging Profile é baseada em categories que pegariam somente os erros que acontecessem nas classes contidas no pacote da minha aplicação (definido no category). E, a solução que adaptei, pega tudo. Inclusive de jars que estão no JBoss e automaticamente estão no classpath de minha aplicação (via. ..\default\lib, por exemplo).

                   

                  Na solução que adaptei do Repository Selector, todas as saídas (inclusive as enviadas do printStackTrace() - que são System.err - e as enviadas ao System.out) são enviadas para o arquivo porém, isto está funcionando bem no JBoss 4.2.3, que usa log4j. Já no JBoss 7/6 EAP (que tem log subsystem na frente) já não funciona mais. Inclusive testei a solução do James Perkins (Logging per Deployment Re: Logging per Deployment - JBoss EAP 6.1.0 Final - Bug - Server.out and Server.err messages lost) porém, a saída redirecionada para getServletContext().log() não vai para o arquivo. Mas foi a que mais chegou perto da solução que estou querendo.

                   

                  Já fez algo parecido?