JavaEE WebApp 用の Logger メソッドをいくつか作成しようとしています。注釈といくつかの競合が発生した後、これをログクラスとして取得しました。
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Produces;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import abc.crm.util.LogEvents.*;
@Named
@RequestScoped
public class Resources {
@Produces @PersistenceContext
private EntityManager entityManager;
@Produces
public FacesContext produceFacesContext() {
return FacesContext.getCurrentInstance();
}
private final static Logger LOG = Logger.getLogger(abc.crm.util.Resources.class.getName());
//This is another method doing the same thing.
public void doLogInfo(@Observes @LogInfo String message) {
FileHandler logWriter;
try {
logWriter = new FileHandler("CRMLog.txt", true);
logWriter.setFormatter(new SimpleFormatter());
LOG.addHandler(logWriter);
LOG.log(Level.INFO, message);
logWriter.close();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
これは、修飾子を宣言した場所です。
public class LogEvents {
@Qualifier
@Target({ FIELD, PARAMETER })
@Retention(RUNTIME)
public @interface LogInfo {
}
@Qualifier
@Target({ FIELD, PARAMETER })
@Retention(RUNTIME)
public @interface LogWarning {
}
@Qualifier
@Target({ FIELD, PARAMETER })
@Retention(RUNTIME)
public @interface LogError {
}
@Qualifier
@Target({ FIELD, PARAMETER })
@Retention(RUNTIME)
public @interface LogDebug {
}
}
そして、これは私がイベントを発生させる場所です:
@Inject
@LogDebug Event<String> doLogDebug;
@Inject
@Deleted
private Event<Customer> customerDeleteEventSrc;
public String doAddCustomer() {
doLogDebug.fire("Kunde kann jetzt angelegt werden");
return customerEditController.setCustomerToEdit(Mode.ADD);//übergibt dem Controller den Kunden
}
ここでの問題は、FileHandler が Log.txt を正しく作成するが、そこにメッセージを書き込まないことです。私もそれを.xmlに書き込もうとしましたが、xml本体と空のスペース「ログ」を含むファイルを作成するだけで、メッセージはありません。文字列メッセージ パラメータが正しく配信されるかどうかは既に確認済みです。
これを解決するためのアイデアはありますか?