~ubuntu-branches/debian/experimental/gpac/experimental

« back to all changes in this revision

Viewing changes to applications/osmo4_android/src/com/gpac/Osmo4/logs/GpacLogger.java

  • Committer: Package Import Robot
  • Author(s): Andres Mejia
  • Date: 2012-02-04 00:12:54 UTC
  • Revision ID: package-import@ubuntu.com-20120204001254-l7v7u4kc4m7cxcqn
Tags: upstream-0.4.5+svn3450~dfsg3
ImportĀ upstreamĀ versionĀ 0.4.5+svn3450~dfsg3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * $URL: http://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac/applications/osmo4_android/src/com/gpac/Osmo4/logs/GpacLogger.java $
 
3
 *
 
4
 * $LastChangedBy: enst_devs $ - $LastChangedDate: 2011-07-05 18:35:26 +0200(mar, 05 lug 2011) $
 
5
 */
 
6
package com.gpac.Osmo4.logs;
 
7
 
 
8
import java.io.BufferedOutputStream;
 
9
import java.io.File;
 
10
import java.io.FileOutputStream;
 
11
import java.io.PrintStream;
 
12
import java.util.Date;
 
13
import java.util.SortedSet;
 
14
import java.util.TreeSet;
 
15
import android.util.Log;
 
16
import com.gpac.Osmo4.GpacConfig;
 
17
import com.gpac.Osmo4.GpacCallback.GF_Log_Module;
 
18
 
 
19
/**
 
20
 * This class handles logging.
 
21
 * 
 
22
 * It will be extended soon to be configurable and enable saving files on disk
 
23
 * 
 
24
 * @version $Revision: 3371 $
 
25
 * 
 
26
 */
 
27
public class GpacLogger {
 
28
 
 
29
    /**
 
30
     * Default Constructor
 
31
     * 
 
32
     * @param gpacConfig
 
33
     */
 
34
    public GpacLogger(GpacConfig gpacConfig) {
 
35
        loggedModules.add(GF_Log_Module.GF_LOG_AUDIO);
 
36
        loggedModules.add(GF_Log_Module.GF_LOG_MEDIA);
 
37
        loggedModules.add(GF_Log_Module.GF_LOG_MODULE);
 
38
        loggedModules.add(GF_Log_Module.GF_LOG_CORE);
 
39
        logger = new File(gpacConfig.getGpacCacheDirectory(), "gpac.log"); //$NON-NLS-1$
 
40
    }
 
41
 
 
42
    private boolean enableLogOnDisk = false;
 
43
 
 
44
    /**
 
45
     * @return the enableLogOnDisk
 
46
     */
 
47
    public synchronized boolean isEnableLogOnDisk() {
 
48
        return enableLogOnDisk;
 
49
    }
 
50
 
 
51
    /**
 
52
     * @param enableLogOnDisk the enableLogOnDisk to set
 
53
     */
 
54
    public synchronized void setEnableLogOnDisk(boolean enableLogOnDisk) {
 
55
        this.enableLogOnDisk = enableLogOnDisk;
 
56
    }
 
57
 
 
58
    private final File logger;
 
59
 
 
60
    /**
 
61
     * Called when creating logger
 
62
     */
 
63
    public void onCreate() {
 
64
        if (!enableLogOnDisk)
 
65
            return;
 
66
        if (writer == null) {
 
67
            try {
 
68
                writer = new PrintStream(new BufferedOutputStream(new FileOutputStream(logger), 128), true, "UTF-8"); //$NON-NLS-1$
 
69
            } catch (Exception e) {
 
70
                Log.e(GpacLogger.class.getSimpleName(), "Failed to create writer", e); //$NON-NLS-1$
 
71
            }
 
72
        }
 
73
        if (writer != null)
 
74
            writer.println("New log $Revision: 3371 $ at " + new Date()); //$NON-NLS-1$
 
75
    }
 
76
 
 
77
    /**
 
78
     * Called when stopping logger
 
79
     */
 
80
    public void onDestroy() {
 
81
        if (!enableLogOnDisk)
 
82
            return;
 
83
        PrintStream w = this.writer;
 
84
        writer = null;
 
85
        if (w != null) {
 
86
            w.println("Closing log file at " + new Date()); //$NON-NLS-1$
 
87
            w.close();
 
88
        }
 
89
    }
 
90
 
 
91
    /**
 
92
     * Logs from C-code
 
93
     * 
 
94
     * @param level
 
95
     * @param module
 
96
     * @param message
 
97
     */
 
98
    public void onLog(int level, int module, String message) {
 
99
        GF_Log_Module gModule = GF_Log_Module.getModule(module);
 
100
        if (loggedModules.contains(gModule)) {
 
101
            if (loggedLevel <= level)
 
102
                doLog(gModule, level, message);
 
103
        } else if (defaultLoggedLevel <= level) {
 
104
            doLog(gModule, level, message);
 
105
        }
 
106
    }
 
107
 
 
108
    private void doLog(GF_Log_Module module, int level, String message) {
 
109
        Log.println(level, module.name(), message);
 
110
        if (enableLogOnDisk) {
 
111
            PrintStream s = writer;
 
112
            if (s != null) {
 
113
                s.println(module.name() + "\t" + message); //$NON-NLS-1$
 
114
                s.flush();
 
115
            }
 
116
        }
 
117
    }
 
118
 
 
119
    private final SortedSet<GF_Log_Module> loggedModules = new TreeSet<GF_Log_Module>();
 
120
 
 
121
    // The log level used by GPAC modules that are part of loggedModules collection
 
122
    private int loggedLevel = Log.DEBUG;
 
123
 
 
124
    // The log level used by GPAC modules not part of loggedModules collection
 
125
    private int defaultLoggedLevel = Log.INFO;
 
126
 
 
127
    /**
 
128
     * @return the loggedLevel
 
129
     */
 
130
    public synchronized int getLoggedLevel() {
 
131
        return loggedLevel;
 
132
    }
 
133
 
 
134
    /**
 
135
     * @param loggedLevel the loggedLevel to set
 
136
     */
 
137
    public synchronized void setLoggedLevel(int loggedLevel) {
 
138
        this.loggedLevel = loggedLevel;
 
139
    }
 
140
 
 
141
    /**
 
142
     * @return the defaultLoggedLevel
 
143
     */
 
144
    public synchronized int getDefaultLoggedLevel() {
 
145
        return defaultLoggedLevel;
 
146
    }
 
147
 
 
148
    /**
 
149
     * @param defaultLoggedLevel the defaultLoggedLevel to set
 
150
     */
 
151
    public synchronized void setDefaultLoggedLevel(int defaultLoggedLevel) {
 
152
        this.defaultLoggedLevel = defaultLoggedLevel;
 
153
    }
 
154
 
 
155
    private volatile PrintStream writer;
 
156
 
 
157
};