doublep / logview Goto Github PK
View Code? Open in Web Editor NEWEmacs mode for viewing log files
License: GNU General Public License v3.0
Emacs mode for viewing log files
License: GNU General Public License v3.0
It would be useful to be able to jump forward to the next log entry that occurs after a gap of >x seconds in the log record timestamps
firstly thanks for this great lib! (keeps emacs wonderful 😄 )
I'm trying to parse this kind of messages 2017-01-24T17:14:03,826 [main] ERROR my.package - my log message
but after a while still no lucky
could you help me please?
this is the config that i tried (just editing current definition)
("ISO 8601 datetime" "yyyy-MM-ddTHH:mm:ss,SSS")
so this is your modified fn
(defvar logview-std-timestamp-formats
;; General notices: we silently handle both common decimal
;; separators (dot and comma). In several cases there is optional
;; space if the day/hour number is single-digit.
(let (formats)
(dolist (data '(("ISO 8601 datetime + millis" "yyyy-MM-dd HH:mm:ss.SSS}")
("ISO 8601 datetime + micros" "yyyy-MM-dd HH:mm:ss.SSSSSS")
("ISO 8601 datetime" "yyyy-MM-ddTHH:mm:ss,SSS")
("ISO 8601 time only + millis" "HH:mm:ss.SSS")
("ISO 8601 time only + micros" "HH:mm:ss.SSSSSS")
("ISO 8601 time only" "HH:mm:ss")
(nil "MMM d HH:mm:ss")
(nil "MMM d h:mm:ss a")
(nil "h:mm:ss a")))
(push (list (or (car data) (cadr data)) (cons 'java-pattern (cadr data))) formats)
(when (car data)
(nconc (car formats) (list (list 'aliases (cadr data))))))
(nreverse formats))
"Alist of standard timestamp formats.
This value is used as the fallback for customizable
`logview-additional-timestamp-formats'.")
Enabling the auto-revert-mode
(o r by default) in a buffer which is looking at a log file over Tramp makes Emacs (almost) unresponsive.
It would be nice if there was an option that allows guess-submode to search past the first line in a log. Maybe even an optional numeric value that would allow this function to search up until that line? This way logview can guess logs with headers, but won't take excessively long to do so.
When selecting a timestamp, it looks like the ISO-8601 format is not supported. For instance, a date like:
2017-09-15T20:23:45,029
Which is yyyy-mm-ddTHH:mm:ss,SSS
It's quite common to have the T
indicator separating the date and time, however this is not one of the supported options.
Also, when I try to manually enter it (the format above) after selecting SLF4J
as the mode, I get the following:
Debugger entered--Lisp error: (error "Internal error initializing submode ‘SLF4J’")
signal(error ("Internal error initializing submode ‘SLF4J’"))
error("Internal error initializing submode `%s'" "SLF4J")
logview-choose-submode("SLF4J")
funcall-interactively(logview-choose-submode "SLF4J")
call-interactively(logview-choose-submode nil nil)
command-execute(logview-choose-submode)
Hey - I have a log line like below, however the "-05:00" is causing issues:
Inf-2023-09-07T16:27:03.479361-05:[email protected]:stopThread:118=>Stopping thread
I've tried
(logview-additional-timestamp-formats
'(("WithTimezone"
(regexp . "[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}[+-][0-9]{2}:[0-9]{2}"))))
and
(logview-additional-timestamp-formats
'(("WithTimezone"
(java-pattern . "yyyy-MM-dd'T'HH:mm:ss.SSSSSSX"))))
however couldn't get either to work, with the latter giving the error message:
Warning (emacs): In Java timestamp pattern "yyyy-MM-dd'T'HH:mm:ss.SSSSSSX": Timezones are currently not supported
When I remove the "-05:00" I can get logview working. Thanks for creating such a great emacs mode!
The standard Python logging module
produces something like this
WARNING:root:Watch out!
It is a Sisyphean task to try to include submodes for different logging solutions and situations (as hinted in the README), but maybe some popular ones would be nice little contributions to this nice Emacs package?
It would be great if one could selectively decide (on a per-field basis) which fields actually get displayed by 'logview' for each log line.
My log lines are typically annoyingly long and it would be great if i could only display the fields i'm actually interested in when viewing each file.
Ideally this would be dynamically tuned, maybe even stored as parameters for a view or something similar.
Maybe this could be implemented as some kind of extension of the already available notion of 'details' for a log entry. Currently, as the documentation explains, 'details' are the message lines after the first line, maybe this could be extended to include the various first line fields.
What do you think ?
Btw, did i tell you how great 'logview' was ?
Maybe in a previous issue, so let me repeat here :-)
As I understand it, we can use the 4 known part types THREAD, NAME, TIMESTAMP and LEVEL, everything else in the format string will be interpreted literally.
I frequently deal with logs (on whose format I have no influence), which have lots of dynamic info on top of that. An example:
Tier-Name App-Name Server-Name Session-Id Timestamp Level ....
ServiceLayer MyApp SLServer1 12341234156131 2017-01-17 10:00:12.1234 DEBUG ....
Frontend MyApp FEServer2 12341234156132 2017-01-17 10:00:12.1234 DEBUG ....
Is it possible to match this format with the current version? If not, is it possible to get a new part, eg. FILLER or IGNORE, which matches a block of non-whitespace?
logview--completing-read
should not default to ido-completing-read
. helm-mode
users may like to use Helm completion instead[1].
Instead, there should be a customizable variable, logview-completion-system
, with (at least) two choices, ido
and default
.
[1]: In the future, I hope ido
will be updated to behave like Helm and override completing-read
so there's one standard interface for all completion.
N/A
N/A
logview
: 0.8
Fedora 24
Hi @doublep ,
Thanks for the wonderful package!
Recently, I have started analyzing the Nextflow logs, https://pastebin.com/j2sGLY7K , but I was not able to set it up with logview
.
The logging framework used in Nextflow is slf4j
as mentioned here
https://github.com/nextflow-io/nextflow/blob/b3e2cdde5edc6152dbd0a38a571f0de5099ccb89/modules/nextflow/build.gradle#L24
I'd love to be able to rely upon logview
to make my life simpler. Could you please help me out?
2023-07-19 14:10:02.736 GMT+08:00 DEBUG T: Subscription Manager Consumer Thread LottieLockView - loading from filesystem
2023-07-19 14:10:02.739 GMT+08:00 DEBUG T: pool-40-thread-1 LottieLockView - starting to play t4.json
Here is an example from my log, and my config is:
TIMESTAMP IGNORED LEVEL T: THREAD NAME - MESSAGE
But some threads like: Subscription Manager Consumer Thread
have space in their name.
How can I deal with these thread names?
Currently these thread names are all end with 'Thread'
The log files I use with logview do not have the message logview is looking for in the first line. Is it possible to manually set the mode? I thought about calling logview--initialize-submode, but I don't know what format the function arguments take.
I currently get round this by killing the text up to the first log message and save this as a separate file, however, I loose the auto-revert feature.
Any help is much appreciated, thanks,
Derek
I recently installed logview and I'm experimenting with different commands. If I type z a
, I get an error.
Example log:
2024-04-19 15:00:23.529003 [31652] DEBUG vh.App - get_supported_instance_extensions() - start
2024-04-19 15:00:23.572853 [31652] DEBUG vh.App - found instance extensions: 12
2024-04-19 15:00:23.576014 [31652] DEBUG vh.App - 0. VK_KHR_device_group_creation
z a
on that first line leads to:
Debugger entered--Lisp error: (void-function nil)
nil("2024-04-19 15:00:23.529003")
#f(compiled-function () #<bytecode -0x117102b1bd31b9b2>)()
#f(compiled-function () #<bytecode -0x84ee57d83187807>)()
internal--without-restriction(#f(compiled-function () #<bytecode -0x84ee57d83187807>) long-line-optimizations-in-command-hooks)
#f(compiled-function () #<bytecode -0x1de6b678879aefed>)()
internal--without-restriction(#f(compiled-function () #<bytecode -0x1de6b678879aefed>) long-line-optimizations-in-fontification-functions)
logview--do-temporarily-widening(#f(compiled-function () #<bytecode -0x117102b1bd31b9b2>))
logview-difference-to-current-entry()
funcall-interactively(logview-difference-to-current-entry)
command-execute(logview-difference-to-current-entry)
I'm having issues setting up which I'm working through, but it's not been obvious to me, partially because I'm not that familiar with Emacs. Having a couple of copy & paste example custom configurations would be useful on your main github page, which might also be adapted to answer questions:
I managed eventually to put the following in my spacemacs file.
(setq logview-additional-submodes
("CUSTOM" . ((format . "LEVEL, NAME, \"TIMESTAMP\", THREAD, \"[IGNORE] []")
(levels . "SLF4J")
(aliases . ("Custom2")))
)))
However it's not working (and the dangling double quote isn't a mistake), but it may also be due to the following:
datetime--determine-system-timezone: Failed to determine system timezone; consider customizing ‘datetime-timezone’ variable
It doesn't guess my format correctly and when I select it it asks for the time format which I enter manually (as : yyyy-MM-dd HH:mm:ss.SSS
after which I get the error message.
I imagine this is an Emacs for Windows issue?
I've just figured out that if I start typing "ISO 8601 datetime + millis" then I get the right alternative selection (thought i could start typing yyy), but then it fails with:
logview-choose-submode: Internal error initializing submode ‘Custom2’ [2 times]
Looking forward to see the tool in action.
I spend some time configuring additional submode for viewing CUPS (printing system) 'error_log' file with is usually located at /var/log/cups/error_log
The problem was that THREAD field that was optional and I had to use regex in format
.
I ended up with following and it works for me. I was wondering how I should to contribute this little bit as this could be too specific for adding to logview-std-submodes
.
(setq logview-additional-submodes
'(("CUPS(error_log)"
(format . "LEVEL [TIMESTAMP]<<RX:THREAD:\\(?:[ \t]+\\[[^]\n]+\\][ \t]+\\|[ \t]+\\)>>MESSAGE")
(levels . "CUPS(error_log)")
(timestamp . ("CUPS(error_log)")))))
(setq logview-additional-level-mappings
'(("CUPS(error_log)"
(error "E")
(warning "W")
(information "I")
(debug "D")
(trace))))
(setq logview-additional-timestamp-formats
'(("CUPS(error_log)"
(java-pattern . "dd/MMM/yyyy:HH:mm:ss Z"))))
How do I add color markers to my log format? My log lines look like:
[THREAD] �[0m[LEVEL] [TIMESTAMP] [NAME]: MESSAGE�[0m
The color before level is different for different levels.
Hi, thanks for a great package. Encouraged by what the README suggests, may I propose adding the logging levels from RFC 5424 The Syslog Protocol to logview-std-level-mappings
? The standard syslog uses that hierarchy of levels, and so does e.g. Monolog, a PHP logging framework.
It is the following:
In Emacs, I personally have added to logview-additional-level-mappings
the following
("RFC 5424"
(error "EMERGENCY, ALERT, CRITICAL, ERROR")
(warning "WARNING")
(information "NOTICE, INFO")
(debug "DEBUG")
(trace)
(aliases "syslog"))
and I use that e.g. with Monolog, with the following in my logview-additional-submodes
("Monolog"
(format . "[TIMESTAMP] NAME[THREAD].LEVEL: MESSAGE")
(levels . "RFC 5424"))
A buffer with output of a log stream (STDOUT) causes emacs errors as log messages are written. If I disable read-only-mode, all is good.
error in process filter: Buffer is read-only: #<buffer *nrepl-server*>
Hi,
I'm trying to come up with a derived mode. This currently corresponds of a logview submode configuration (which could be integrated here) but also of additional font-lock keywords and extra navigation code (future work). It currently looks like this:
;;; Commentary:
;; This file provides a major mode (`robot-log-mode') for highlighting
;; RobotFramework debug logs. This mode was inspired by
;; `guix-build-log' from the `emacs-guix' package; thanks!
;;; Code:
(require 'logview)
;;; TODO
;;; - Foldable hierarchy + select functions (root, level 1, 2, etc.)
;;;
;;; Regexps.
;;;
(defvar robot-log-keyword-start-regexp
"\\+-* START KEYWORD: \\(.*\\) \\[\\(.*\\)\\]"
"Regexp for the start line of a keyword.")
(defvar robot-log-keyword-end-regexp
"\\+-* END KEYWORD: \\(.*\\) (\\(.*\\))"
"Regexp for the ending line of a keyword.")
(defvar robot-log-imenu-generic-expression
`((nil robot-log-keyword-start-regexp 1))
"Imenu generic expression for `robot-log-mode'.")
;;;
;;; Font lock configuration.
;;;
(defface robot-log-keyword-start
'((default :weight bold))
"Face for RobotFramework keywords (start).")
(defface robot-log-keyword-arguments
'((default :foreground "LightBlue"))
"Face for RobotFramework keyword arguments.")
(defface robot-log-keyword-end
'((default :weight bold))
"Face for RobotFramework keywords (end).")
(defface robot-log-keyword-exit-status
'((default :foreground "LightGreen"))
"Face for RobotFramework keyword exit statuses.")
(defvar robot-log-font-lock-keywords
`((,robot-log-keyword-start-regexp
(1 'robot-log-keyword-start)
(2 'robot-log-keyword-arguments))
(,robot-log-keyword-end-regexp
(1 'robot-log-keyword-end)
(2 'robot-log-keyword-exit-status)))
"A list of `font-lock-keywords' for `robot-log-mode'.")
;;;
;;; Navigation.
;;;
;;; TODO
(defvar robot-log-common-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "SPC") (lambda () (message "test\n")) ;'robot-log-next-keyword
)
;; (define-key map (kbd "M-p") 'robot-log-previous-keyword)
;; (define-key map (kbd "TAB") 'robot-log-keyword-toggle)
;; (define-key map (kbd "<tab>") 'robot-log-keyword-toggle)
;; (define-key map (kbd "<backtab>") 'robot-log-toggle-all)
;; (define-key map [(shift tab)] 'robot-log-toggle-all)
map)
"Parent keymap for 'robot-log' buffers, adding or overriding
extra keys on top of those of `logview-mode'.")
(defvar robot-log-mode-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map (make-composed-keymap
(list robot-log-common-map)
logview-mode-map))
map)
"Keymap for `robot-log-mode' buffers.")
;;; TODO: Contribute upstream. This needs to be at the top level so
;;; that the parent logview-mode knows its definition before it is
;;; initialized.
(add-to-list 'logview-additional-level-mappings
'("RobotFramework"
(error "FAIL")
(warning "WARNING")
(information "INFO" "HTML")
(debug "DEBUG")
(trace "TRACE")
(aliases "RF" "Robot")))
(add-to-list 'logview-additional-timestamp-formats
'("RobotFramework"
(java-pattern . "yyyyMMdd HH:mm:ss.SSS")
(datetime-options :any-decimal-separator t)
(aliases "Robot" "RF")))
(add-to-list 'logview-additional-submodes
'("RobotFramework"
(format . "TIMESTAMP - LEVEL - MESSAGE")
(levels . "RobotFramework")
(timestamp "RobotFramework")
(aliases "RF" "Robot")))
;;;###autoload
(define-derived-mode robot-log-mode logview-mode
"Robot-Log"
"Major mode for viewing RobotFramework debug logs.
\\{robot-log-mode-map}"
;;(font-lock-add-keywords nil robot-log-font-lock-keywords t)
(setq font-lock-defaults '(robot-log-font-lock-keywords t)
imenu-generic-expression robot-log-imenu-generic-expression))
(provide 'robot-log)
The problem I'm having is that my font-lock-defauts
are not honored. After investigating and reading, this seems to be caused by logview
directly overriding the internal font-lock-fontify-region-function
procedure. In info 'elisp (Font Lock Basics)'
, it says:
There are several variables that control how Font Lock mode
highlights text. But major modes should not set any of these variables
directly. Instead, they should set ‘font-lock-defaults’ as a
buffer-local variable. The value assigned to this variable is used, if
and when Font Lock mode is enabled, to set all the other variables.
font-lock-defaults
can be provided with OTHER-VARS
, which includes font-lock-fontify-region-function
, so I think logview
should use font-lock-defaults
to bind #'logview--fontify-region
to font-lock-fontify-region-function
. Do you think that'd help with my issue?
Thank you for this useful mode!
Thank you for this! This is everything I've been looking for basically :)
Can't believe this has only 120 stars...
I recently had to sift through insane amounts of test and system logs at work - all with nonstandard formats and absolutely no tooling support. With just a few additions to logview-additional-submodes and logview-additional-timestamp-formats this turned from blankly staring at a massive wall of text into me being able to efficiently work with, understand and mentally process those logs. You have no idea how happy you've made me with this awesome package, so I'd like to say thank you very much for it 💖
Feel free to close this :)
This could be a useful submode for a relatively popular log format. Apache uses RFC 5424 levels (#32).
log sample:
2017-02-17 18:28:45.321 29283 DEBUG neutron.agent.linux.utils Running command create_process /opt/stack/new/neutron/neutron/agent/linux/utils.py:97
I am trying to get my logs to be recognized and at the moment it seems like the big issue is the time stamp. My company uses epoch time (sorta). The time stamp is "10DigitEpochTime us". The number of micro seconds will always have 6 entries, either numbers or spaces (i.e. no leading zeros). I tried the following, but whenever I try to use it I am asked for a timestamp format.
(setq logview-additional-timestamp-formats
'(("CUSTOM" (regexp . "[0-9]{10} [ 0-9]{6}")))
)
(setq logview-additional-level-mappings
'(("CUSTOM"
(error "ERROR")
(warning "WARN")
(information "INFO")
(debug "DEBUG")
(trace)
(aliases))))
(setq logview-additional-submodes
'(("CUSTOM"
(format . "[TIMESTAMP THREAD LEVEL]")
(levels . "CUSTOM")
(timestamp "CUSTOM")
(aliases)))
)
Hi, I don't think the Auto-Revert and Auto-Revert-Tail modes work on buffers which are opened over Tramp, from remote hosts. I've tried, and auto-revert on local files works fine.
I am not familiar with Emacs file abstractions etc. and how/why would Logview know or care if things are over Tramp or not, and I don't see a variable to adjust the (perhaps reasonable and preferable) observed behavior of not reverting over Tramp, but if there is anything I should know (e.g. about some variable to set outside of logview-*
) or I can help with, let me know :)
Logview is a very nice mode, and comes with useful functionality for development and admin work 🚀
The following error occurs when logview.views file is not present.
Result: Logview mode is disabled.
regards,
Hi!
First let me provide you with the usual praise for your wonderful 'logview' package,
I've been long wishing for something similar, and was more than delighted when discovering it actually existed!
Now for the complaining part :-)
Well, it's not really a complaint, but a question rather.
I'm using logview to parse logback generated files but with a slightly specific/unusual format, in that log lines are using '|' as a field separator rather than space characters.
Here is an example:
2017-04-11 09:33:01.067|WARN|vspar-iris-v-fromsr2|[http-nio-10.136.28.58-8082-exec-4]|com.profium.afp.connector.ConnectorProductManager:409|CONSOLE-2.16.0.201703161620-1491903155823-HLAFARGE|102|No path found for product [Test NLR FR No limit 01 - EN DIRECT]
I've been able to make it work almost using the following customized definition for logview-additional-submodes:
(setq logview-additional-submodes
'(("DILI" (format . "TIMESTAMP|LEVEL|IGNORED|[THREAD]|IGNORED|NAME|IGNORED|") (levels . "SLF4J"))))
my only remaining problem using that definition seems to come from the following lines in logview.el:
;; Always behave as if format string ends with whitespace.
(unless (string-match "[ \t]$" format)
(push "[ \t]+" parts))
when commenting out those two lines, i get logview to recognize my log files content allright.
Not sure if there is another way to achieve my goal, or if maybe you could make a change to allow
for not 'always' behaving as if format string ends with whitespace.
Kudos again for the fantastic module!
It's not customary for modes to modify auto-mode-alist
. Also, auto-mode-alist
is for major modes, and yours is a minor mode.
Monolog is a popular PHP logging library.
When I hit C-c C-c
and select Log4j2
as the submode, I get the following error:
Debugger entered--Lisp error: (error "Unknown submode ‘Log4j2’")
signal(error ("Unknown submode ‘Log4j2’"))
error("Unknown submode `%s'" "Log4j2")
logview-choose-submode("Log4j2")
funcall-interactively(logview-choose-submode "Log4j2")
call-interactively(logview-choose-submode nil nil)
command-execute(logview-choose-submode)
The same thing for all the aliases, it works if I select SLF4J however
it would be a great feature i believe if it was possible to extend the list of fields recognized in the 'format' specification for a submode definition.
This would be especially useful in conjunction to other field related functionality such as filtering or my requested feature for allowing dynamic selection of fields to display for each log line.
I have no idea how difficult this would be to implement, but i think it would come as a nice enhancement to that already feature-rich module!
To illustrate what i'm talking about here, my current logfiles look something like:
2017-04-11 09:33:01.086|INFO|vspar-iris-v-fromsr2|[http-nio-10.136.28.58-8082-exec-4]|com.profium.afp.connector.FileNamer:143|CONSOLE-2.16.0.201703161620-1491903155823-HLAFARGE|102|returning processed string [d.afp.com/QE5ZA] after prefix removal [http://] for given input [http://d.afp.com/QE5ZA]
and i'm currently using the following specification to parse them:
(setq logview-additional-submodes
'(("DILI" (format . "TIMESTAMP|LEVEL|IGNORED|[THREAD]|IGNORED|NAME|IGNORED|") (levels . "SLF4J"))))
What i'd like to be able to do instead is to replace 'IGNORED' in the various places i'm using it with tailored field names that i would provide the needed information for, so that logview knows how to handle them properly.
Hi,
I installed the package from melba, and didn't add anything to my .emacs file.
Now, when I open a file, I get a message saying that longview doesn't recognize the log format (which I expect – this is not a common log format).
However, when I do M-x read-only-mode RET, pressing characters just tells me that the buffer is read-only and can't be edited.
Am I doing something wrong?
Thanks!
Contacting host: melpa.org:443
url-insert-file-contents: https://melpa.org/packages/logview-20170127.1107.el: Not found
Hi,
I am contemplating using LogView instead of log4J but I can't get it to process my log files. The format is fairly straightforward, I think:
2016-02-04 22:32:40.994975 [INFO] [knit.workflow] Starting.
2016-02-04 22:32:40.995986 [DEBUG] [knit.workflow] Knitting options: { "__type__": "dogen::config::knitting_options", "verbose": true, "input": { "__type__": "dogen::config::input_options", "target": { "__type__": "dogen::config::input_descriptor", "path": "/home/marco/Development/DomainDrivenConsulting/dogen/build/output/gcc-5/stage/bin/../test_data/yarn.dia/input/boost_model.dia", "external_modules": "dogen::test_models", "is_target": false }, "references": [ ] }, "output": { "__type__": "dogen::config::output_options", "delete_extra_files": true, "force_write": false, "ignore_patterns": [ ] }, "cpp": { "__type__": "dogen::config::cpp_options", "project_directory_path": "/home/marco/Development/DomainDrivenConsulting/dogen/build/output/gcc-5/stage/bin/../test_data/boost_model/actual", "disable_cmakelists": false } }
2016-02-04 22:32:40.996029 [DEBUG] [dynamic.repository_workflow] Generating repository.
I tried setting up the following:
(setq logview-additional-submodes
'(("dogen"
(format . "TIMESTAMP [LEVEL] [NAME] -")
(levels . "SLF4J"))))
However, LogView is not able to recognise my file. I'm sure I'm making a trivial mistake somewhere but not sure where. Can you please point me in the right direction?
Many thanks for your time.
Marco
If I don't have a logview.views file, I expect no problems, but I always get this warning:
Warning (emacs): Opening input file: no such file or directory, /home/telliott/.emacs.d/logview.views
It seems that (file-missing)
is not catching and I'm falling through to (file-error (warn "%s" (error-message-string error)))
GNU Emacs 24.4.1
Hey there. I'm having an issue with syntax highlighting and I'm not sure if it's expected behavior.
Syntax highlighting appears to work only for the portion of the logfile visible on-screen when first applying the submode to the logfile.
When viewing a logfile in Logview mode, with auto-revert-tail-mode
on, the file is tailed in the buffer as expected, but new lines lack syntax highlighting.
Syntax highlighting will also be absent when navigating the buffer to older portions of the logfile.
Load a logfile. I've tried both with a custom submode format on an application logfile, originally, and then with /var/log/system.log
. The latter was not autodetected -- I choose a submode name of 'UNIX' and a date format of 'MMM d HH:mm:ss'.
GNU Emacs 25.1.1 on OSX 10.11.6
Great tool, thanks!
I propose support for Android's logcat format.
brief
, long
, etc.)Android Logcat looks like this example.
...
02-15 08:00:12.370 2009 2009 I MediaCodecsXmlParser: limit: blocks-per-second-range = 1-489600
02-15 08:00:12.370 2009 2009 I MediaCodecsXmlParser: limit: bitrate-range = 1-60000000
02-15 08:00:12.370 2009 2009 I MediaCodecsXmlParser: limit: feature-adaptive-playback = 0
02-15 08:00:12.370 2009 2009 I MediaCodecsXmlParser: limit: max-concurrent-instances = 4
02-15 08:00:12.370 2009 2009 I MediaCodecsXmlParser: limit: performance-point-1920x1080-range = 50-50
02-15 08:00:12.370 2009 2009 I MediaCodecsXmlParser: limit: size-range = 32x32-1920x1080
...
Or more concisely, date time PID TID log-level tag: message
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.