質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

7682閲覧

ログの出力ファイルが期待通りにならない

Linkey

総合スコア77

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/03/20 12:46

macでmavenプロジェクトでlog4jを使用しています。ログのファイル名に日付を設定しようとしているのですがうまくできません。htmlファイルから以下のサーブレットを呼び出した時にログに出力をする仕様です。

xml

1 2<?xml version="1.0" encoding="UTF-8"?> 3<!DOCTYPE configuration> 4 5<configuration status="OFF"> 6 7<Properties> 8 <Property name="error_daily_log">logs/app_error_%d{yyyy-MM-dd HH:mm:ss.SSS}</Property> 9</Properties> 10 <Appenders> 11 <Console name="Console" target="SYSTEM_OUT"> 12 <PatternLayout pattern="%d{DEFAULT} | [%t] | %-5level | %c{36} | %msg%n"/> 13 </Console> 14 <File name="File" fileName="logs/normal_app.log"> 15 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | [%t] | %-5level | %c{36} | %msg%n"/> 16 </File> 17 <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app_%date{yyyyMMdddHHmmSS}.log"> 18 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | [%t] | %-5level | %c{36} | %msg%n"/> 19 <Policies> 20 <TimeBasedTriggeringPolicy /> 21 </Policies> 22 </RollingFile> 23 </Appenders> 24 <Loggers> 25 <Root level="error"> 26 <AppenderRef ref="File" /> 27 <AppenderRef ref="RollingFile" /> 28 </Root> 29 <Logger name="test" level="trace" additivity="false"> 30 <AppenderRef ref="Console"/> 31 <AppenderRef ref="File" /> 32 <AppenderRef ref="RollingFile" /> 33 </Logger> 34 </Loggers> 35</configuration> 36

java

1 2package resistration.servlet; 3 4import java.io.IOException; 5import java.io.PrintWriter; 6import java.util.logging.Logger; 7 8import javax.servlet.ServletException; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13import org.apache.logging.log4j.LogManager; 14/** 15 * Servlet implementation class ResistrationServlet 16 */ 17public class ResistrationServlet extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Logger.class.getName()); 20 21 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 22 doPost(request, response); 23 } 24 25 /** 26 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 27 */ 28 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 29 String param = request.getParameter("process_status"); 30 31 logger.debug("ログ出力テストです"); 32 33 34 35 response.setContentType("text/html;charset=UTF-8"); 36 PrintWriter out = response.getWriter(); 37 out.println("<html>"); 38 out.println("<head>"); 39 out.println("<title>HELLO!!サーブレットの世界にようこそ</title>"); 40 // 日本語のメッセージを表示したい 41 out.println("</head>"); 42 out.println("<body>"); 43 out.println("HELLO!!サーブレットの世界にようこそ"); 44 out.println(param); 45 out.println("</body>"); 46 out.println("</html>"); 47 out.close(); 48 } 49 50} 51

実施後に確認したところ以下のようにログが出力されました。

bin user$
bin user$ ls -la /Applications/Eclipse_4.6.2.app/Contents/MacOS/logs/
total 0
drwxr-xr-x 3 user admin 102 3 20 21:38 .
drwxr-xr-x@ 7 user admin 238 3 20 21:36 ..
-rw-r--r-- 1 user admin 0 3 20 21:36 app.log
bin user$

問題点1:ログのファイル名に日付が設定されない
問題点2:ログファイルは出力されるがログが書き込まれない

log4j2.xmlの設定に詳しい方、お力をお貸しいただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Loggerのnameがtestになっているため、このLoggerはtestパッケージ配下のログしか出力しません。
また、デフォルトのログレベルがerrorになっているため、デバッグログは出力されません。
該当のクラスのログを出力するには

Logger name="resistration.servlet"

とする必要があります。
ログ出力内容が無いため、ファイルのローテートがされず、ログのファイル名に日付が設定されなくなっているため、この対応でどちらも解決するはずです。

投稿2017/03/21 01:00

7tsuno

総合スコア310

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Linkey

2017/03/22 16:10 編集

教えていただいた内容で修正し、プログラムを起動してみたところ初回のログファイル名はapp.logというファイルでしたが2回目以降はちゃんとapp_yyyyMMddHHmmssの名前で出力されました。初回のログファイルに日付が設定されないのはlog4j2の仕様なのでしょうか? またregistrationパッケージと同じ階層にutilパッケージがあるのですがlog4j.xmlにlogger name = utilで設定すればregistrationパッケージとutilパッケージ出力するログのレベルや内容を自由に設定できるということでしょうか?
7tsuno

2017/03/23 00:54 編集

> 初回のログファイルに日付が設定されないのはlog4j2の仕様なのでしょうか? 初回のログファイルに日付が設定されないのではなく、起動時などのローテートのタイミングでに前回のログファイルがバックアップされてファイル名に日付が入るようなイメージです。書き込み中のログについては日付を設定することは出来ません。 > またregistrationパッケージと同じ階層にutilパッケージがあるのですがlog4j.xmlにlogger name = utilで設定すればregistrationパッケージとutilパッケージ出力するログのレベルや内容を自由に設定できるということでしょうか? ご認識の通りです。
Linkey

2017/03/25 13:56

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問