Criar log sem main

22 respostas
R

Bom dia galera.

Estou com um pequeno problema…

Estou tentando criar um arquivo.log …
bom isso eu consigo, o problema que só funciona quando o projeto tem um método main.
No caso estou tentando fazer com que meu Web Service tenha um log e o mesmo não possui um método main e não cria o arquivo de log…
Se eu colocar um main dentro de qualquer classe o log funciona…

Qualquer dica é bem vinda…

Att, rafael…

22 Respostas

wbdsjunior

Poste o código do que você já fez para que possamos entender o problema e ajudá-lo.

R

Obrigado por responder.

Segue o xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
	debug="false">

	<!-- ================================= -->
	<!-- Preserve messages in a local file -->
	<!-- ================================= -->

	<!-- A time/date based rolling appender -->

	<appender name="FILE" class="org.apache.log4j.FileAppender">
		<param name="File" value="logs/loggin.log" />
		<param name="Append" value="true" />

		<layout class="org.apache.log4j.PatternLayout">
			<!-- The default pattern: Date Priority [Category] Message\n -->
			<param name="ConversionPattern" value="%d %-5p [%c] [%t] %m%n" />

			<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n 
				<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/> -->
		</layout>
	</appender>

	
	<!-- Append messages to the console -->


	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
		<!-- <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> -->
		<param name="Target" value="System.out" />
		<param name="Threshold" value="INFO" />

		<layout class="org.apache.log4j.PatternLayout">
			<!-- The default pattern: Date Priority [Category] Message\n -->
			<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] [%t] %m%n" />
		</layout>
	</appender>

	

	<!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
	<category name="com.webservice">
		<priority value="DEBUG" />
	</category>

	<!-- Limit org.jgroups category to INFO -->
	<category name="org.jgroups">
		<priority value="INFO" />
	</category>



	<root>
		<priority value="INFO" />
		<appender-ref ref="FILE" />
		<appender-ref ref="CONSOLE" />
	</root>


</log4j:configuration>

Classe principal do webservice:

@WebService(endpointInterface = "com.webservice.ISave", serviceName = "Save")
public class Save implements ISave {
	private final Logger logger = Logger.getLogger(this.getClass());

	private connection connection = new connection();
	private SaveFile saveFile = new SaveFile();
	private SaveDTO saveDto = new SaveDTO ();
	

	@WebMethod
	public String[] saveFile(List<String[]> file) {
		String[] returnRow = null;
		for (String[] row : file) {
			logger.info("Enviando o pacote: "+ row +" para a base de dados!");
			statisticDto = saveFile.loadFile(row);
			if (connection.saveDB(saveDto).equals(true)) {
				returnRow = row;
			}
		}
		return returnRow;
	}
}
wbdsjunior

E o import? A classe Logger da API do Java SE também tem o método info.

R

IMPORTS:

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

import org.apache.log4j.Logger;
R

IMPORTS:

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

import org.apache.log4j.Logger;
wbdsjunior
rafael.kbeca:
IMPORTS:
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

import org.apache.log4j.Logger;
Está correto.

Não há nenhuma mensagem de erro no servidor? Tente gerar o arquivo em outro diretório, que o usuário que incia o servidor tenha permissão e veja o que acontece.

nebster

o que pode estar acontecendo é que voce deveria chamar o metodo de “log” em determinadas funções de seu webservice para ele “adicionar ao log” determinada ação antes que ele execulte, caso contrario fica como um metodo dependente do metodo main.

R

Como faço para chamar o metodo sem usar o main?

E tem outro ponto que talvez seja importante.

Eu estava executando o webservice externamente, peguei ele e fui rodar no eclipse pra facilitar e retornou o seguinte erro:

Caused by: java.io.IOException: Not Found
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2071)
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2022)
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1947)
	at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47)
	at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188)
	at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
	at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
	... 9 more

 javax.xml.ws.soap.SOAPFaultException: Could not send Message.

fico no aguardo… abraço!

nebster

o metodo main faz a chamada inicial.
o webservice vai utlizar metodos externos.

vc tem q liberar para metodos externos aumentarem o log e não apenas o metodo main.

R

nebster obrigado por responder…

Mas tu tem um link ou uma dica de como fazer isso?

Abraço!

nebster

cara,
eh simples ate demais…

vou colocar tudo da maneira mais simples o processo

<recebeu solicitação de importar dados>



<adiciona uma linha dentro do log com a futura alteração>



<faz a alteração>

<retorna uma confirmação>

simples assim.

R

HUm…

Desta maneira se eu entendi a modificação vai ficar dentro do código (classe java). tipo abrir o arquivo inserir a linha salvar e fechar…
eu só sei e prefiro fazer em xml pra ficar externo facilitando a configuração…

E o erro IOException not found é esse o erro?

pq eu tiro o xml e o erro continua…

nebster

IOException not found = ExcessãoIO não encontrada

verifique certinho o codigo por completo e verifique depois a conexão do xml com a classe.

R

Não tem conexão xml com a classe… o log4j pega automático…

Sobre o erro ja verifiquei…

gostaria de saber se alguém ja teve algum erro parecido para dar uma luz…

Abraço!

C

cara, não precisa de main pra rolar o log… se vc está com o arquivo de configuração do log4j ok então é só confirmar se em category vc referencia o package correto da classe…

eu geralmente faço assim no arquivo properties do log4j

log4j.category.br.com.controller=ERROR

e na classe:

protected static Logger logger = Logger.getLogger(MainController.class);

R

clonex8 obrigado por responder…

Não deu tbm…

O engraçado que se eu criar um main em qualquer classe do webservice o log funciona…

e só ta funcionando externamente no eclipse fica dando aquele exception…

Abraço!

C

rafael.kbeca:
clonex8 obrigado por responder…

Não deu tbm…

O engraçado que se eu criar um main em qualquer classe do webservice o log funciona…

e só ta funcionando externamente no eclipse fica dando aquele exception…

Abraço!

saquei… putz, complicado…

Outra, eu tava olhando a exception lançada e se não me engano a classe HttpConduit que lança esta IOExpection… da uma confirmada pra ver se é isto mesmo…

Este erro é quando o webserver diz que o serviço não foi implantado no local… Dá uma olhada se a porta definida no WSDL aponta pra um local válido e que o serviço está implantado… verifica também a porta HTTP do serviço SOAP, pega a url e add ?WSDL nela… ve se retorna um WSDL válido (o xml)

R

O exception é lançada pela classe HttpConduit mas a ultima classe a entrar é a PhaseInterceptorChain

Alguma dica?

C

vc chegou a confirmar se o wsdl é válido? o webservice está lançando IO e seu log parace que não loga… não seguei a olhar direito, pq to enroladão aqui… mas seu log tá escrevendo ERROR??? confirma ai primeiro o wsdl se está válido e pega pra logar error…

R

clonex8,
O logger não aparece nada, nada, nada.

O wsdl esta certo pq quando eu faço o .war do webservice e coloco direto no deploy do jboss ( fora do eclipse .) chego até salvar no banco de dados.

mas mesmo assim o logger não funciona…

fiquei preocupado com esse exception agora.

R

Boa noite…

Bom o exception resolvi… na verdade não sei como sai pondo try catch em tudo e parou de dar erro…
é eu sei “Mistério do alem”…

Mas o log4j ainda não esta funcionando …
Alguma dica?

R

Só mais uma informação…

Eu consigo criar esse log dentro de qualquer outra pasta c:/teste menos dentro do projeto…

Alguém ja teve esse problema?

Criado 1 de julho de 2013
Ultima resposta 2 de jul. de 2013
Respostas 22
Participantes 4