Add stderr to log messages
This commit is contained in:
		
							parent
							
								
									f6d1ecd757
								
							
						
					
					
						commit
						9dff066a9c
					
				| 
						 | 
					@ -32,12 +32,16 @@ func Exec(binary, url string, options ...Option) error {
 | 
				
			||||||
		cmd.Stdout = opts.stdout
 | 
							cmd.Stdout = opts.stdout
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var stderr = new(bytes.Buffer)
 | 
				
			||||||
	if opts.stderr != nil {
 | 
						if opts.stderr != nil {
 | 
				
			||||||
		cmd.Stderr = opts.stderr
 | 
							cmd.Stderr = stderr
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := cmd.Run(); err != nil {
 | 
						if err := cmd.Run(); err != nil {
 | 
				
			||||||
		return err
 | 
							return &Error{
 | 
				
			||||||
 | 
								stderr: stderr.String(),
 | 
				
			||||||
 | 
								child:  err,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	buf, bufOk := opts.stdout.(*bytes.Buffer)
 | 
						buf, bufOk := opts.stdout.(*bytes.Buffer)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,9 +7,7 @@ import (
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"go.fifitido.net/ytdl-web/pkg/utils"
 | 
					 | 
				
			||||||
	"go.fifitido.net/ytdl-web/pkg/ytdl/metadata"
 | 
						"go.fifitido.net/ytdl-web/pkg/ytdl/metadata"
 | 
				
			||||||
	"golang.org/x/exp/slog"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Options struct {
 | 
					type Options struct {
 | 
				
			||||||
| 
						 | 
					@ -93,14 +91,6 @@ func WithStreamOutput(output io.Writer) Option {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func WithDebug() Option {
 | 
					 | 
				
			||||||
	return func(opts *Options) error {
 | 
					 | 
				
			||||||
		opts.stdout = utils.LoggerWriter(slog.With("module", "ytdl"), slog.LevelDebug)
 | 
					 | 
				
			||||||
		opts.stderr = utils.LoggerWriter(slog.With("module", "ytdl"), slog.LevelDebug)
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func WithPlaylistIndex(index int) Option {
 | 
					func WithPlaylistIndex(index int) Option {
 | 
				
			||||||
	return func(opts *Options) error {
 | 
						return func(opts *Options) error {
 | 
				
			||||||
		opts.args = append(opts.args, "--playlist-items", fmt.Sprint(index+1))
 | 
							opts.args = append(opts.args, "--playlist-items", fmt.Sprint(index+1))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					package ytdl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Error struct {
 | 
				
			||||||
 | 
						stderr string
 | 
				
			||||||
 | 
						child  error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *Error) Error() string {
 | 
				
			||||||
 | 
						return e.child.Error()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *Error) Stderr() string {
 | 
				
			||||||
 | 
						return e.stderr
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@ package ytdl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"os/exec"
 | 
						"os/exec"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
| 
						 | 
					@ -63,10 +64,6 @@ func (y *ytdlImpl) baseOptions(url string) []Option {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if y.cfg.IsDevelopment() {
 | 
					 | 
				
			||||||
		options = append(options, WithDebug())
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return options
 | 
						return options
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +85,17 @@ func (y *ytdlImpl) GetMetadata(url string) (*metadata.Metadata, error) {
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := Exec(y.cfg.BinaryPath, url, options...); err != nil {
 | 
						if err := Exec(y.cfg.BinaryPath, url, options...); err != nil {
 | 
				
			||||||
		y.logger.Error("failed to get metadata", slog.String("url", url), slog.String("error", err.Error()))
 | 
							attrs := []any{
 | 
				
			||||||
 | 
								slog.String("url", url),
 | 
				
			||||||
 | 
								slog.String("error", err.Error()),
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var ytdlErr *Error
 | 
				
			||||||
 | 
							if ok := errors.As(err, &ytdlErr); ok {
 | 
				
			||||||
 | 
								attrs = append(attrs, slog.String("stderr", ytdlErr.Stderr()))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							y.logger.Error("failed to get metadata", attrs...)
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue