[go: nahoru, domu]

1470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt/*
2470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * Copyright (C) 2006 The Android Open Source Project
3470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt *
4470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License");
5470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * you may not use this file except in compliance with the License.
6470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * You may obtain a copy of the License at
7470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt *
8470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt *      http://www.apache.org/licenses/LICENSE-2.0
9470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt *
10470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * Unless required by applicable law or agreed to in writing, software
11470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS,
12470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * See the License for the specific language governing permissions and
14470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * limitations under the License.
15470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt */
16470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt
17470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwaltpackage android.util;
18470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt
19470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwaltimport java.io.FileDescriptor;
20470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwaltimport java.io.PrintWriter;
21c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalleimport java.util.Calendar;
22470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwaltimport java.util.Iterator;
23470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwaltimport java.util.LinkedList;
24470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt
25470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt/**
26470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt * @hide
27470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt */
28470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwaltpublic final class LocalLog {
29470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt
30470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    private LinkedList<String> mLog;
31470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    private int mMaxLines;
32c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalle    private long mNow;
33470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt
34470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    public LocalLog(int maxLines) {
35470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt        mLog = new LinkedList<String>();
36470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt        mMaxLines = maxLines;
37470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    }
38470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt
39470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    public synchronized void log(String msg) {
40470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt        if (mMaxLines > 0) {
41c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalle            mNow = System.currentTimeMillis();
42c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalle            StringBuilder sb = new StringBuilder();
43c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalle            Calendar c = Calendar.getInstance();
44c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalle            c.setTimeInMillis(mNow);
45c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalle            sb.append(String.format("%tm-%td %tH:%tM:%tS.%tL", c, c, c, c, c, c));
46c520aa89a33ddb7c065ef06bcd2d2dbf96e1f989vandwalle            mLog.add(sb.toString() + " - " + msg);
47470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt            while (mLog.size() > mMaxLines) mLog.remove();
48470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt        }
49470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    }
50470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt
51470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
52470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt        Iterator<String> itr = mLog.listIterator(0);
53470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt        while (itr.hasNext()) {
54470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt            pw.println(itr.next());
55470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt        }
56470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt    }
5722b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt
587523eb349e7ecb1fdfd8e8a9371306ab28c046ecErik Kline    public synchronized void reverseDump(FileDescriptor fd, PrintWriter pw, String[] args) {
597523eb349e7ecb1fdfd8e8a9371306ab28c046ecErik Kline        for (int i = mLog.size() - 1; i >= 0; i--) {
607523eb349e7ecb1fdfd8e8a9371306ab28c046ecErik Kline            pw.println(mLog.get(i));
617523eb349e7ecb1fdfd8e8a9371306ab28c046ecErik Kline        }
627523eb349e7ecb1fdfd8e8a9371306ab28c046ecErik Kline    }
637523eb349e7ecb1fdfd8e8a9371306ab28c046ecErik Kline
6422b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt    public static class ReadOnlyLocalLog {
6522b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt        private final LocalLog mLog;
6622b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt        ReadOnlyLocalLog(LocalLog log) {
6722b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt            mLog = log;
6822b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt        }
6922b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt        public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
7022b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt            mLog.dump(fd, pw, args);
7122b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt        }
7222b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt    }
7322b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt
7422b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt    public ReadOnlyLocalLog readOnlyLocalLog() {
7522b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt        return new ReadOnlyLocalLog(this);
7622b4c6a027d72ec90dc91d150bee007cb8167eedRobert Greenwalt    }
77470fd72a06390d7a6b854583afd0ed76ce0a03eeRobert Greenwalt}
78