実現したいこと
WEBサーブレットからロギングクラスのメソッドを呼び出して、ロギングしたい。
前提
Windows11、Java8、Tomcat8、eclipseを使用。
クラスLogGetにメソッドrecordLog()を作成ます。このメソッドにロギングに必要なコーディングをしました。
このロギングのクラスに対して、次の2通りの方法で実行します。
1 javaアプリでmainメソッドからこのクラス(メソッド)を呼びだす
2 サーブレットからこのクラス(メソッド)を呼び出す
発生している問題・エラーメッセージ
上記1の場合は設定どおりの出力が得られますが、2の場合はコンソールに表示されますが、設定したFomatterでは出力されません。
該当のソースコード
Java8
public class LogGet {
private static final Logger login = Logger.getLogger(LogGet.class.getName());
public void recordLog(String id, String adr, boolean result) throws IOException{
System.setProperty("java.util.logging.SimpleFormatter.format", "%1$tF %1$tT.%1$tL%n %2$s %3$s%n %4$s:%5$s%n");
Formatter fm = new SimpleFormatter();
//親ロガーに送信するかどうかtrueで送信 login.setUseParentHandlers(false); //logger Level login.setLevel(Level.FINE); //FileHendler obj Handler loginHandler = new FileHandler("loginStatus.log", true); //Handler output form loginHandler.setFormatter(fm); //add FileHandler to Logger login.addHandler(loginHandler); //FileHandler Level loginHandler.setLevel(Level.FINE); //ConsoleHandler obj ConsoleHandler loginCon = new ConsoleHandler(); //ConsoleHandler output form loginCon.setFormatter(fm); //add ConsoleHandler to Logger login.addHandler(loginCon); //ConsoleHandler Level loginCon.setLevel(Level.FINE); //LogManager.getLogManager().readConfiguration(LogGet.class.getResourceAsStream("loginLog.properties")); //Logger login = Logger.getLogger("LogGet"); if (result) { //login.fine(id + ":" + adr + "ログイン成功"); login.log(Level.FINE, id + ":" + adr + " ログイン成功"); } else { //login.fine(id + ":" + adr + "ログイン失敗"); login.log(Level.FINE, id + ":" + adr + " ログイン失敗"); } }
}
@WebServlet("/LogGetMainServlet")
public class LogGetMainServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = "servlet", adr = "192.168.100.32";
boolean result = true;
LogGet lg = new LogGet();
try {
lg.recordLog(id, adr, result);
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
public class LogGetMain {
public static void main(String[] args) {
String id="mainMethod", adr="192.168.158.42";
boolean result = true;
LogGet lg = new LogGet();
try {
lg.recordLog(id, adr, result);
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
試したこと
サーブレットから直接LogGet#receordLog()を呼び出すのではなく、modelを作成しましたが、結果は変わりませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー