Computer Science/LCP

로그분석2

seyun99 2018. 4. 24. 22:06
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.lgcns.test;
 
import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class RunManager {
 
    public static void main(String[] args) {
 
        File file = new File("./LOGFILE_C.TXT");
        LogFileReader logFileReader = new LogFileReader(file);
        
        LogFileList logFileList = new LogFileList();
        
        ExecutorService exeService = Executors.newFixedThreadPool(101);
        
        exeService.execute(logFileReader);
        
        for(int i = 0 ; i < 10 ; i++) {
            LogFileWriter logFileWriter = new LogFileWriter(logFileList);
            exeService.execute(logFileWriter);
        }
        
        for(int i = 0 ; i < 100 ; i++) {
            LogFileQueue.add("Q");
        }
                
        exeService.shutdown();
        
        
    }
 
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.lgcns.test;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class LogFileWriter implements Runnable {
    
    LogFileList logFileList;
        
    public LogFileWriter(LogFileList logFileList) {
        super();
        this.logFileList = logFileList;
        
    }
    
    public void writeLog(String name, String log) {
        LogFileNode logFile = logFileList.getLogFile(name);
        if(logFile == null) {
            logFile = logFileList.addLogFile(name);
        }
        
        String convertLog = null;
        
        Runtime run = Runtime.getRuntime();
        
        String param[] = {log};
        try {
            
            Process proc = run.exec("./CODECONV.EXE " + log);
            
            BufferedReader br = new BufferedReader(new InputStreamReader( proc.getInputStream()));
            
            String readLine;
            while((readLine = br.readLine()) != null) {
                convertLog = readLine;
            }
            
            br.close();
            
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        logFile.writeLog(name + " | " + log + " ==> " + convertLog);
    }
    
    public void writeLog(String readLine) {
        String arrayStr[] = readLine.split("#");
        writeLog(arrayStr[1], arrayStr[2]);
    }
 
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true) {
            
            String readLine = LogFileQueue.pool();
            //System.out.println("ReadLog : " + readLine);
            if(readLine == null) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
            else if(readLine.equals("Q")) {
                /* 탈출조건 */
                break;
            }
            else {
                writeLog(readLine);
            }            
        }
    }
 
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.lgcns.test;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class LogFileReader implements Runnable {
    
    File logFile; /* 파일 오픈후 전달 */
    
    public LogFileReader(File logFile) {
        super();
        this.logFile = logFile;
    }
 
    public File getLogFile() {
        return logFile;
    }
 
    public void setLogFile(File logFile) {
        this.logFile = logFile;
    }
 
    @Override
    public void run() {
        BufferedReader br = null;
        try {
             br = new BufferedReader(new FileReader(logFile));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        String readLine = null;
        try {
            while((readLine = br.readLine()) != null) {
                LogFileQueue.add(readLine);
                //System.out.println(readLine);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
 
}
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.lgcns.test;
 
import java.util.LinkedList;
import java.util.Queue;
 
public class LogFileQueue {
    
    private static Queue<String> queue = new LinkedList<String>();
    
    synchronized public  static  String pool( ) {
        return queue.poll();
    }
    
    synchronized public static boolean add(String str) {
        return queue.add(str);
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.lgcns.test;
 
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
 
public class LogFileNode {
    String name;
    File logFile;
    BufferedWriter bw;
    public LogFileNode(String name) {
        super();
        this.name = name;
        this.logFile = new File("./" + name + ".log");        
        try {
            bw = new BufferedWriter(new FileWriter(logFile));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public String getName() {
        return name;
    }
 
    synchronized public void writeLog(String str) {
        Thread thread = Thread.currentThread();
        
        System.out.println("쓰기중" +  thread.getName() + " : " + str);
        
        try {
            bw.write(str);
            bw.newLine();
            bw.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
            
    @Override
    protected void finalize() throws Throwable {
        // TODO Auto-generated method stub
        super.finalize();
        bw.close();
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.lgcns.test;
 
import java.util.ArrayList;
 
public class LogFileList {
    
    ArrayList<LogFileNode> logFileList = new ArrayList<LogFileNode>(10);
    
    synchronized public LogFileNode addLogFile(String name) {
        
        /* 이전에 Thread가 같은 이름의 파일을 생성 했을 수도 있으므로 */
        LogFileNode logFileNode = getLogFile(name);
        
        if(logFileNode == null) {        
            logFileNode = new LogFileNode(name);
            logFileList.add(logFileNode);
            System.out.println("파일생성:" + name);
        }        
        
        return logFileNode;
    }
    
    public LogFileNode getLogFile(String name) {
        for(LogFileNode logFile : logFileList) {
            if(logFile.getName().equals(name)) {
                return logFile;
            }
        }
        
        return null;
        
    }
    
}
cs