teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

文法修正

2020/05/21 08:01

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,18 +3,13 @@
3
3
  <実現>
4
4
  ・ファイルに書き込みとコンソールに出力は任意のメソッドを作成して処理を行いたい。
5
5
  ・一行ずつ読み込んでファイルに書き込みとコンソールに出力をさせたい
6
- ・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。
6
+ ・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。 
7
-
8
- <質問>
9
- ・ 1行ずつmarkErroLine,extractDateLogを行えるようにしたいのですが、どうすればいいですか?
10
- ・毎回IOExceptionが発生してしまうので判定などで回避したい。理由:Throwsやcatchは重いため。  
11
7
  <前提>
12
8
  1:「app.log」というファイルを読み込んで、「ERROR」「FATAL」行の先頭に「★」印を印字したファイル「app_error.log」を作成
13
9
  2:「app.log」というファイルを読み込んで、「2019年1月11日」の記録を抽出した「app_20190111.log」を作成
14
10
  3: [ERROR」「FATAL 」行の先頭に「★」印を印字して、引数で指定されたファイルに出力するメソッド「markErrorLine」を作成
15
11
  4: 引数で渡された日付(Calendar-Class)に該当する行をファイルに出力する メソッド「extractDateLog」を作成
16
- 5: 他に共通する処理があれば、任意のメソッドを作成して処理をしたい。
17
- 6: 結果として、以下のように記載の内容を表示したい。
12
+ 5: 結果として、以下のように記載の内容を表示したい。
18
13
 
19
14
  ExampleOfOutput:
20
15
  1.実行処理
@@ -28,8 +23,6 @@
28
23
  3.app_20190111.log
29
24
  2019/01/11 13:30:10.861 DEBUG (DBLogic.java getConnection) - DBコネクション取得
30
25
  2019/01/11 13:30:10.923 DEBUG (DBLogic.java closeConnection) - DBコネクションクローズ
31
- 2019/01/11 13:30:19.177 DEBUG (DBLogic.java getConnection) - DBコネクション取得
32
- 2019/01/11 13:30:19.177 DEBUG (DBLogic.java begin) - トランザクション開始
33
26
  ### 該当のソースコード
34
27
 
35
28
  ```Java
@@ -397,4 +390,25 @@
397
390
  2019/01/16 13:30:23.530 DEBUG (DBLogic.java commit) - トランザクションコミット
398
391
  3. app_20190111.log
399
392
 
393
+ ```
394
+ ###追記3
395
+ mark method を用いたら解決しました。
396
+ ```
397
+ br.mark((int)file.length());
398
+ String line;
399
+ while ((line = br.readLine()) != null) {
400
+ markErrorLine(newErrorfile, line);
401
+
402
+
403
+ }
404
+ br.reset();
405
+ System.out.println("3. app_20190111.log");
406
+
407
+ String line1;
408
+ while ((line1 = br.readLine()) != null) {
409
+
410
+ extractDateLog(cal, line1);
411
+
412
+
413
+ }
400
414
  ```

2

文法の修正

2020/05/21 08:01

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,24 +4,18 @@
4
4
  ・ファイルに書き込みとコンソールに出力は任意のメソッドを作成して処理を行いたい。
5
5
  ・一行ずつ読み込んでファイルに書き込みとコンソールに出力をさせたい
6
6
  ・extractメソッドにあるclose()が必要なところにfinally句で必ず実行させるようにしたい。
7
- ・extractDateLogメソッドループないで毎回パターンを作らずに行いたい
7
+
8
- ・markErrorLineメソッド
9
- ・l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0")をファイル出力とコンソール出力を1回でしたい。
10
8
  <質問>
11
9
  ・ 1行ずつmarkErroLine,extractDateLogを行えるようにしたいのですが、どうすればいいですか?
12
10
  ・毎回IOExceptionが発生してしまうので判定などで回避したい。理由:Throwsやcatchは重いため。  
13
-
14
11
  <前提>
15
12
  1:「app.log」というファイルを読み込んで、「ERROR」「FATAL」行の先頭に「★」印を印字したファイル「app_error.log」を作成
16
13
  2:「app.log」というファイルを読み込んで、「2019年1月11日」の記録を抽出した「app_20190111.log」を作成
17
14
  3: [ERROR」「FATAL 」行の先頭に「★」印を印字して、引数で指定されたファイルに出力するメソッド「markErrorLine」を作成
18
15
  4: 引数で渡された日付(Calendar-Class)に該当する行をファイルに出力する メソッド「extractDateLog」を作成
19
- 4-1: MarkErrorLine method and ExtractDateLog method をexecute methodから呼んで処理をする
20
- 4-2: execute methodはmain method から呼ぶ
21
16
  5: 他に共通する処理があれば、任意のメソッドを作成して処理をしたい。
22
- 6: できれば、出力ファイルはクラスファイル実行ディレクトリと同一階層に出力
23
- 7: 結果として、以下のように記載の内容を表示したい。
17
+ 6: 結果として、以下のように記載の内容を表示したい。
24
- 8:Javadocの記載があれば有り難いです。
18
+
25
19
  ExampleOfOutput:
26
20
  1.実行処理
27
21
  ログファイルの解析処理を開始します
@@ -36,10 +30,6 @@
36
30
  2019/01/11 13:30:10.923 DEBUG (DBLogic.java closeConnection) - DBコネクションクローズ
37
31
  2019/01/11 13:30:19.177 DEBUG (DBLogic.java getConnection) - DBコネクション取得
38
32
  2019/01/11 13:30:19.177 DEBUG (DBLogic.java begin) - トランザクション開始
39
-
40
-
41
-
42
-
43
33
  ### 該当のソースコード
44
34
 
45
35
  ```Java
@@ -203,7 +193,7 @@
203
193
  ### 試したこと
204
194
  何故かERROR or FATAL 以外のやつはコンソールに出力されるが、ファイルには一行しか書き込まれていない。
205
195
  ERRORやFATALに合致したログを★を付け加えて編集させて出力とファイルに書き込みしたいのに、これは出力も書き込みもされていませんでした。
206
- ```
196
+ ```java
207
197
  import java.io.BufferedReader;
208
198
  import java.io.BufferedWriter;
209
199
  import java.io.File;
@@ -374,9 +364,7 @@
374
364
 
375
365
  java_1.8
376
366
  eclipse_version_14
377
-
378
-
379
- ###追記
367
+ ###追記1
380
368
  変数に結果を代入してファイル・コンソールに出力させた。
381
369
  ```
382
370
  try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
@@ -388,4 +376,25 @@
388
376
  //pw.close();
389
377
  }
390
378
  }
379
+ ```
380
+ ###追記2
381
+ extractDateLog メソッドを実行した後に"3.app_201911.log"を出力しているため、コンソール出力・ファイル書き込み後に出力されていることに気がつきました。
382
+ ただ、while文のなかでextractDateLogメソッドを実行する直前に記述しても一行ずつ"3.app_201911.log"が出力される気がします。
383
+ どう修正すればよいかどなたかご教示願います。
384
+ ```Java
385
+ String line;
386
+ while ((line = br.readLine()) != null) {
387
+ markErrorLine(newErrorfile, line);
388
+ extractDateLog(cal, line);
389
+
390
+
391
+ }
392
+ System.out.println("3. app_20190111.log");
393
+ ```
394
+ 出力結果;
395
+ ```
396
+ 2019/01/16 13:30:23.467 DEBUG (WriteOperationLogLogic.java insert) - ログ証跡出力 終了
397
+ 2019/01/16 13:30:23.530 DEBUG (DBLogic.java commit) - トランザクションコミット
398
+ 3. app_20190111.log
399
+
391
400
  ```

1

修正

2020/05/21 01:53

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -373,4 +373,19 @@
373
373
  ### 補足情報(FW/ツールのバージョンなど)
374
374
 
375
375
  java_1.8
376
- eclipse_version_14
376
+ eclipse_version_14
377
+
378
+
379
+ ###追記
380
+ 変数に結果を代入してファイル・コンソールに出力させた。
381
+ ```
382
+ try(PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(newErrorfile)));){
383
+ for (String l : textLines) {
384
+ String s1 = l.replaceFirst("^(.*)(FATAL|ERROR)(.*)$", "★$0");
385
+ pw.println(s1);
386
+ System.out.println(s1);
387
+ }
388
+ //pw.close();
389
+ }
390
+ }
391
+ ```