123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <template>
- <section class="log-view">
- <b-loading :active="loading" :is-full-page="false" />
- <div class="lines" ref="lines">
- <template v-for="(l, i) in lines">
- <span :set="line = splitLine(l)" :key="i" class="line">
- <span class="timestamp" :title="line.file">{{ line.timestamp }}</span>
- <span class="message">{{ line.message }}</span>
- </span>
- </template>
- </div>
- </section>
- </template>
- <script>
- // Regexp for splitting log lines in the following format to
- // [timestamp] [file] [message].
- // 2021/05/01 00:00:00 init.go:99: reading config: config.toml
- const reFormatLine = new RegExp(/^([0-9\s:/]+) (.+?\.go:[0-9]+):\s/g);
- export default {
- name: 'LogView',
- props: {
- loading: Boolean,
- lines: {
- type: Array,
- default: () => [],
- },
- },
- methods: {
- splitLine: (l) => {
- const parts = l.split(reFormatLine);
- return {
- timestamp: parts[1],
- file: parts[2],
- message: parts[3],
- };
- },
- formatLine: (l) => l.replace(reFormatLine, '<span class="stamp">$1</span> '),
- },
- watch: {
- lines() {
- this.$nextTick(() => {
- this.$refs.lines.scrollTop = this.$refs.lines.scrollHeight;
- });
- },
- },
- };
- </script>
|