Add --log-file so logs are easier to collect (#321)

This commit is contained in:
Félix Saparelli 2022-06-16 15:56:59 +00:00
parent f0e05f9526
commit adc4a0a576
13 changed files with 52 additions and 13 deletions

View File

@ -11,7 +11,7 @@ Please delete this template text before filing, but you _need_ to include the fo
- Watchexec's version - Watchexec's version
- The OS you're using - The OS you're using
- A log with `-vvv` (if it has sensitive info you can email it at felix@passcod.name — do that _after_ filing so you can reference the issue ID) - A log with `-vvv --log-file ../watchexec.log` (if it has sensitive info you can email it at felix@passcod.name — do that _after_ filing so you can reference the issue ID)
- A sample command that you've run that has the issue - A sample command that you've run that has the issue
Thank you Thank you

View File

@ -15,7 +15,7 @@ assignees: ''
- Latest version that worked: - Latest version that worked:
- Earliest version that doesn't: (don't sweat testing earlier versions if you don't remember or have time, your current version will do) - Earliest version that doesn't: (don't sweat testing earlier versions if you don't remember or have time, your current version will do)
- OS: - OS:
- A debug log with `-vvv`: - A debug log with `-vvv --log-file ../watchexec.log`:
``` ```
``` ```

13
Cargo.lock generated
View File

@ -2438,6 +2438,16 @@ dependencies = [
"tracing-core", "tracing-core",
] ]
[[package]]
name = "tracing-serde"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
dependencies = [
"serde",
"tracing-core",
]
[[package]] [[package]]
name = "tracing-subscriber" name = "tracing-subscriber"
version = "0.3.11" version = "0.3.11"
@ -2448,12 +2458,15 @@ dependencies = [
"lazy_static", "lazy_static",
"matchers", "matchers",
"regex", "regex",
"serde",
"serde_json",
"sharded-slab", "sharded-slab",
"smallvec", "smallvec",
"thread_local", "thread_local",
"tracing", "tracing",
"tracing-core", "tracing-core",
"tracing-log", "tracing-log",
"tracing-serde",
] ]
[[package]] [[package]]

View File

@ -20,6 +20,7 @@ args=(
'(-W --watch-when-idle)'{-W,--watch-when-idle}'[Ignore events while the command is still running]' '(-W --watch-when-idle)'{-W,--watch-when-idle}'[Ignore events while the command is still running]'
'(-V --version)'{-V,--version}'[Prints version information]' '(-V --version)'{-V,--version}'[Prints version information]'
'(-v --verbose)'{-v,-vv,-vvv,-vvvv,--verbose}'[Print debugging messages to stderr]' '(-v --verbose)'{-v,-vv,-vvv,-vvvv,--verbose}'[Print debugging messages to stderr]'
'--log-file=[Output logs to a file, in JSON format]:path:_path_files -/'
'(-N --notify)'{-N,--notify}'[Send desktop notifications on command start and end]' '(-N --notify)'{-N,--notify}'[Send desktop notifications on command start and end]'
'--print-events[Print triggering events to stderr (changed paths, etc)]' '--print-events[Print triggering events to stderr (changed paths, etc)]'
'(-d --debounce)'{-d+,--debounce=}'[Set the timeout between detected change and command execution, defaults to 100ms]:milliseconds' '(-d --debounce)'{-d+,--debounce=}'[Set the timeout between detected change and command execution, defaults to 100ms]:milliseconds'

View File

@ -71,6 +71,7 @@ version = "0.3.6"
features = [ features = [
"env-filter", "env-filter",
"fmt", "fmt",
"json",
] ]
[target.'cfg(target_env = "musl")'.dependencies] [target.'cfg(target_env = "musl")'.dependencies]

View File

@ -75,6 +75,12 @@ pub fn get_args(tagged_filterer: bool) -> Result<ArgMatches> {
.multiple_occurrences(true) .multiple_occurrences(true)
.short('v') .short('v')
.long("verbose")) .long("verbose"))
.arg(Arg::new("log-file")
.help_heading(Some(OPTSET_DEBUGGING))
.help("Write debugging messages to file in JSON format (use for bug reports)")
.long("log-file")
.takes_value(true)
.value_name("path"))
.arg(Arg::new("print-events") .arg(Arg::new("print-events")
.help_heading(Some(OPTSET_DEBUGGING)) .help_heading(Some(OPTSET_DEBUGGING))
.help("Print events that trigger actions") .help("Print events that trigger actions")

View File

@ -1,6 +1,6 @@
#![deny(rust_2018_idioms)] #![deny(rust_2018_idioms)]
use std::env::var; use std::{fs::File, sync::Mutex, env::var};
use miette::{IntoDiagnostic, Result}; use miette::{IntoDiagnostic, Result};
use tracing::debug; use tracing::debug;
@ -37,6 +37,10 @@ async fn main() -> Result<()> {
{ {
let verbosity = args.occurrences_of("verbose"); let verbosity = args.occurrences_of("verbose");
let log_file = if let Some(file) = args.value_of("log-file") {
Some(File::create(file).into_diagnostic()?)
} else { None };
let mut builder = tracing_subscriber::fmt().with_env_filter(match verbosity { let mut builder = tracing_subscriber::fmt().with_env_filter(match verbosity {
0 => "watchexec-cli=warn", 0 => "watchexec-cli=warn",
1 => "watchexec=debug,watchexec-cli=debug", 1 => "watchexec=debug,watchexec-cli=debug",
@ -49,7 +53,9 @@ async fn main() -> Result<()> {
builder = builder.with_span_events(FmtSpan::NEW | FmtSpan::CLOSE); builder = builder.with_span_events(FmtSpan::NEW | FmtSpan::CLOSE);
} }
if verbosity > 3 { if let Some(writer) = log_file {
builder.json().with_writer(Mutex::new(writer)).try_init().ok();
} else if verbosity > 3 {
builder.pretty().try_init().ok(); builder.pretty().try_init().ok();
} else { } else {
builder.try_init().ok(); builder.try_init().ok();

View File

@ -1,6 +1,5 @@
--- ---
source: cli/tests/help.rs source: crates/cli/tests/help.rs
assertion_line: 16
expression: "String::from_utf8(output.stdout).unwrap()" expression: "String::from_utf8(output.stdout).unwrap()"
--- ---
watchexec 1.19.0 watchexec 1.19.0
@ -64,8 +63,10 @@ Behaviour options:
Specify the signal to send when using --on-busy-update=signal Specify the signal to send when using --on-busy-update=signal
Debugging options: Debugging options:
--print-events Print events that trigger actions --log-file <path> Write debugging messages to file in JSON format (use for bug reports)
-v, --verbose Print debugging messages (-v, -vv, -vvv, -vvvv; use -vvv for bug reports) --print-events Print events that trigger actions
-v, --verbose Print debugging messages (-v, -vv, -vvv, -vvvv; use -vvv for bug
reports)
Use @argfile as first argument to load arguments from the file `argfile` (one argument per line) Use @argfile as first argument to load arguments from the file `argfile` (one argument per line)
which will be inserted in place of the @argfile (further arguments on the CLI will override or add which will be inserted in place of the @argfile (further arguments on the CLI will override or add

View File

@ -64,8 +64,10 @@ Behaviour options:
Specify the signal to send when using --on-busy-update=signal Specify the signal to send when using --on-busy-update=signal
Debugging options: Debugging options:
--print-events Print events that trigger actions --log-file <path> Write debugging messages to file in JSON format (use for bug reports)
-v, --verbose Print debugging messages (-v, -vv, -vvv, -vvvv; use -vvv for bug reports) --print-events Print events that trigger actions
-v, --verbose Print debugging messages (-v, -vv, -vvv, -vvvv; use -vvv for bug
reports)
Use @argfile as first argument to load arguments from the file `argfile` (one argument per line) Use @argfile as first argument to load arguments from the file `argfile` (one argument per line)
which will be inserted in place of the @argfile (further arguments on the CLI will override or add which will be inserted in place of the @argfile (further arguments on the CLI will override or add

View File

@ -5,7 +5,7 @@
use std::{ use std::{
ffi::OsString, ffi::OsString,
path::{Path, PathBuf, MAIN_SEPARATOR}, path::{Path, PathBuf},
}; };
use ignore::gitignore::{Gitignore, GitignoreBuilder}; use ignore::gitignore::{Gitignore, GitignoreBuilder};
@ -150,6 +150,7 @@ impl Filterer for GlobsetFilterer {
#[cfg(unix)] #[cfg(unix)]
if let Ok(based) = path.strip_prefix(&self.origin) { if let Ok(based) = path.strip_prefix(&self.origin) {
let rebased = { let rebased = {
use std::path::MAIN_SEPARATOR;
let mut b = self.origin.clone().into_os_string(); let mut b = self.origin.clone().into_os_string();
b.push(PathBuf::from(String::from(MAIN_SEPARATOR))); b.push(PathBuf::from(String::from(MAIN_SEPARATOR)));
b.push(PathBuf::from(String::from(MAIN_SEPARATOR))); b.push(PathBuf::from(String::from(MAIN_SEPARATOR)));

View File

@ -1,7 +1,7 @@
.\" generated with Ronn/v0.7.3 .\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3
. .
.TH "WATCHEXEC" "1" "April 2022" "" "" .TH "WATCHEXEC" "1" "June 2022" "" ""
. .
.SH "NAME" .SH "NAME"
\fBwatchexec\fR \- execute commands when watched files change \fBwatchexec\fR \- execute commands when watched files change
@ -164,6 +164,10 @@ Prints the events (changed paths, etc) that have triggered an action to STDERR\.
Prints diagnostic and debugging messages to STDERR\. Increase the amount of \fBv\fRs to get progressively more output: for bug reports use \fBthree\fR, and for deep debugging \fBfour\fR can be helpful\. Prints diagnostic and debugging messages to STDERR\. Increase the amount of \fBv\fRs to get progressively more output: for bug reports use \fBthree\fR, and for deep debugging \fBfour\fR can be helpful\.
. .
.TP .TP
\fB\-\-log\-file\fR \fIpath\fR
Writes diagnostic and debugging messages (from the \fB\-v\fR options) to file instead of STDERR, in JSON format\. This is preferrable for reporting bugs\. Be careful \fBnot\fR to write to a file within the purview of Watchexec to avoid recursion!
.
.TP
\fB\-V\fR, \fB\-\-version\fR \fB\-V\fR, \fB\-\-version\fR
Print the version of watchexec\. Print the version of watchexec\.
. .

View File

@ -177,6 +177,7 @@ watchexec [-h|--help]</p>
<dl> <dl>
<dt><code>--print-events</code>, <code>--changes-only</code> (deprecated alias)</dt><dd><p>Prints the events (changed paths, etc) that have triggered an action to STDERR.</p></dd> <dt><code>--print-events</code>, <code>--changes-only</code> (deprecated alias)</dt><dd><p>Prints the events (changed paths, etc) that have triggered an action to STDERR.</p></dd>
<dt><code>-v</code>, <code>--verbose</code>, <code>-vv</code>, etc</dt><dd><p>Prints diagnostic and debugging messages to STDERR. Increase the amount of <code>v</code>s to get progressively more output: for bug reports use <strong>three</strong>, and for deep debugging <strong>four</strong> can be helpful.</p></dd> <dt><code>-v</code>, <code>--verbose</code>, <code>-vv</code>, etc</dt><dd><p>Prints diagnostic and debugging messages to STDERR. Increase the amount of <code>v</code>s to get progressively more output: for bug reports use <strong>three</strong>, and for deep debugging <strong>four</strong> can be helpful.</p></dd>
<dt><code>--log-file</code> <var>path</var></dt><dd><p>Writes diagnostic and debugging messages (from the <code>-v</code> options) to file instead of STDERR, in JSON format. This is preferrable for reporting bugs. Be careful <strong>not</strong> to write to a file within the purview of Watchexec to avoid recursion!</p></dd>
<dt><code>-V</code>, <code>--version</code></dt><dd><p>Print the version of watchexec.</p></dd> <dt><code>-V</code>, <code>--version</code></dt><dd><p>Print the version of watchexec.</p></dd>
<dt><code>-h</code>, <code>--help</code></dt><dd><p>Print a help message.</p></dd> <dt><code>-h</code>, <code>--help</code></dt><dd><p>Print a help message.</p></dd>
</dl> </dl>
@ -315,7 +316,7 @@ watchexec [-h|--help]</p>
<ol class='man-decor man-foot man foot'> <ol class='man-decor man-foot man foot'>
<li class='tl'></li> <li class='tl'></li>
<li class='tc'>April 2022</li> <li class='tc'>June 2022</li>
<li class='tr'>watchexec(1)</li> <li class='tr'>watchexec(1)</li>
</ol> </ol>

View File

@ -125,6 +125,9 @@ Prints the events (changed paths, etc) that have triggered an action to STDERR.
* `-v`, `--verbose`, `-vv`, etc: * `-v`, `--verbose`, `-vv`, etc:
Prints diagnostic and debugging messages to STDERR. Increase the amount of `v`s to get progressively more output: for bug reports use **three**, and for deep debugging **four** can be helpful. Prints diagnostic and debugging messages to STDERR. Increase the amount of `v`s to get progressively more output: for bug reports use **three**, and for deep debugging **four** can be helpful.
* `--log-file` <path>:
Writes diagnostic and debugging messages (from the `-v` options) to file instead of STDERR, in JSON format. This is preferrable for reporting bugs. Be careful **not** to write to a file within the purview of Watchexec to avoid recursion!
* `-V`, `--version`: * `-V`, `--version`:
Print the version of watchexec. Print the version of watchexec.