Pergunta

Então, aqui está o meu problema:
Eu tenho um acionado por mensagens de feijão X e gostaria de fazer uso de Logger no método () onMessage de X. Permite supor que eu tenho uma única instância do bean em execução no meu servidor de aplicativo, portanto, gostaria de inicializar log4j em ejbCreate (). Isso significaria que eu teria que fazer algo como isto:

public void ejbCreate() {
    PropertyConfigurator.configure(Classloader.getResourceAsStream("xyz_log4j.properties"));
}

No entanto, isso não ajuda. Não importa o que eu faço Eu sempre obter o meu fluxo como nulo, eu tentei outras versões: this.getClass () GetStream () e ResourceBundle..

Eu jar'ed meu arquivo de propriedades para test.jar e acrescentou que sob bibliotecas EAR (estou usando RAD7) e ele ficou refletido na minha manifest.mf.

Alguém rosto esse problema antes? Se sim, como você resolvê-lo? Agradecemos a sua ajuda ...

Foi útil?

Solução

Eu não recomendaria a configuração log4j no EJB criar método. Várias EJBeans pode ser activado / passivado aos recipientes caprichos acordo com a especificação J2EE. Assim, existe a possibilidade de você acabar de configurar log4j várias vezes. Recomendamos o uso de beans de inicialização que são garantidos para ser invocada somente 1 vez.

Outras dicas

Se você está recebendo este de dentro de um arquivo JAR, então você está faltando um / iniitial:

Classloader.getResourceAsStream("/xyz_log4j.properties")

E dependendo de qual diretório contém o arquivo de propriedades, você tem que especificar um caminho para esse diretório em relação ao topo da hierarquia de classes. Por exemplo, se este arquivo de propriedades está no mesmo diretório que net.mine.Program, então você faria isso:

Classloader.getResourceAsStream("/net/mine/xyz_log4j.properties")

Eu não acredito que você pode ler a partir do diretório META-INF usando getResourceAsStream(), mas eu nunca tentei isso, talvez há uma maneira de fazê-lo.

Você poderia tentar duro de codificação o nome da classe para a carga.

<name of your class>.class.getResourceAsStream(fileName);

Como alternativa, você pode querer olhar para SLF4J . Que é uma fachada que pode sentar-se no topo de LOG4J. A API é basicamente o mesmo (mesmo criador creio eu), e não SLF4J não requer uma chamada de inicialização explicada, o que simplifica as coisas um pouco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top