desktop: Log to ruffle.log in addition to stdout
This commit is contained in:
parent
4927baf290
commit
6585ffdd28
|
@ -4388,6 +4388,7 @@ dependencies = [
|
|||
"tokio",
|
||||
"toml_edit 0.22.6",
|
||||
"tracing",
|
||||
"tracing-appender",
|
||||
"tracing-subscriber",
|
||||
"tracing-tracy",
|
||||
"unic-langid",
|
||||
|
@ -5466,6 +5467,18 @@ dependencies = [
|
|||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-appender"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"thiserror",
|
||||
"time",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-attributes"
|
||||
version = "0.1.27"
|
||||
|
|
|
@ -25,6 +25,7 @@ ruffle_render_wgpu = { path = "../render/wgpu", features = ["clap"] }
|
|||
ruffle_video_software = { path = "../video/software", optional = true }
|
||||
tracing = { workspace = true }
|
||||
tracing-subscriber = { workspace = true }
|
||||
tracing-appender = "0.2.3"
|
||||
slotmap = { workspace = true }
|
||||
winit = "0.29.14"
|
||||
webbrowser = "0.8.13"
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
use crate::cli::Opt;
|
||||
use crate::custom_event::RuffleEvent;
|
||||
use crate::gui::{GuiController, MENU_HEIGHT};
|
||||
use crate::player::{PlayerController, PlayerOptions};
|
||||
|
@ -37,20 +36,20 @@ pub struct App {
|
|||
}
|
||||
|
||||
impl App {
|
||||
pub fn new(opt: Opt) -> Result<Self, Error> {
|
||||
let movie_url = opt.movie_url.clone();
|
||||
pub fn new(preferences: GlobalPreferences) -> Result<Self, Error> {
|
||||
let movie_url = preferences.cli.movie_url.clone();
|
||||
let icon_bytes = include_bytes!("../assets/favicon-32.rgba");
|
||||
let icon =
|
||||
Icon::from_rgba(icon_bytes.to_vec(), 32, 32).context("Couldn't load app icon")?;
|
||||
|
||||
let event_loop = EventLoopBuilder::with_user_event().build()?;
|
||||
|
||||
let no_gui = opt.no_gui;
|
||||
let no_gui = preferences.cli.no_gui;
|
||||
let min_window_size = (16, if no_gui { 16 } else { MENU_HEIGHT + 16 }).into();
|
||||
let max_window_size = get_screen_size(&event_loop);
|
||||
let preferred_width = opt.width;
|
||||
let preferred_height = opt.height;
|
||||
let start_fullscreen = opt.fullscreen;
|
||||
let preferred_width = preferences.cli.width;
|
||||
let preferred_height = preferences.cli.height;
|
||||
let start_fullscreen = preferences.cli.fullscreen;
|
||||
|
||||
let window = WindowBuilder::new()
|
||||
.with_visible(false)
|
||||
|
@ -64,7 +63,6 @@ impl App {
|
|||
let mut font_database = fontdb::Database::default();
|
||||
font_database.load_system_fonts();
|
||||
|
||||
let preferences = GlobalPreferences::load(opt)?;
|
||||
let mut gui = GuiController::new(
|
||||
window.clone(),
|
||||
&event_loop,
|
||||
|
|
|
@ -18,6 +18,7 @@ mod task;
|
|||
mod time_demo;
|
||||
mod util;
|
||||
|
||||
use crate::preferences::GlobalPreferences;
|
||||
use anyhow::Error;
|
||||
use app::App;
|
||||
use clap::Parser;
|
||||
|
@ -25,8 +26,12 @@ use cli::Opt;
|
|||
use rfd::MessageDialogResult;
|
||||
use ruffle_core::StaticCallstack;
|
||||
use std::cell::RefCell;
|
||||
use std::fs::File;
|
||||
use std::panic::PanicInfo;
|
||||
use tracing_subscriber::fmt::Layer;
|
||||
use tracing_subscriber::layer::SubscriberExt;
|
||||
use tracing_subscriber::util::SubscriberInitExt;
|
||||
|
||||
use url::Url;
|
||||
|
||||
thread_local! {
|
||||
|
@ -66,18 +71,6 @@ fn init() {
|
|||
prev_hook(info);
|
||||
panic_hook(info);
|
||||
}));
|
||||
|
||||
let subscriber = tracing_subscriber::fmt::Subscriber::builder()
|
||||
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
|
||||
.finish();
|
||||
|
||||
#[cfg(feature = "tracy")]
|
||||
let subscriber = {
|
||||
use tracing_subscriber::layer::SubscriberExt;
|
||||
let tracy_subscriber = tracing_tracy::TracyLayer::new();
|
||||
subscriber.with(tracy_subscriber)
|
||||
};
|
||||
subscriber.init();
|
||||
}
|
||||
|
||||
fn panic_hook(info: &PanicInfo) {
|
||||
|
@ -156,12 +149,37 @@ fn shutdown() {
|
|||
|
||||
fn main() -> Result<(), Error> {
|
||||
init();
|
||||
|
||||
let opt = Opt::parse();
|
||||
let result = if opt.timedemo {
|
||||
time_demo::run_timedemo(opt)
|
||||
} else {
|
||||
App::new(opt).and_then(|app| app.run())
|
||||
let preferences = GlobalPreferences::load(opt.clone())?;
|
||||
|
||||
// [NA] `_guard` cannot be `_` or it'll immediately drop
|
||||
// https://docs.rs/tracing-appender/latest/tracing_appender/non_blocking/index.html
|
||||
let log_path = preferences.cli.config.join("ruffle.log");
|
||||
let (non_blocking_file, _file_guard) = tracing_appender::non_blocking(File::create(log_path)?);
|
||||
let (non_blocking_stdout, _stdout_guard) = tracing_appender::non_blocking(std::io::stdout());
|
||||
|
||||
let env_filter = tracing_subscriber::EnvFilter::from_default_env();
|
||||
|
||||
let subscriber = tracing_subscriber::registry()
|
||||
.with(env_filter)
|
||||
.with(Layer::new().with_writer(non_blocking_stdout))
|
||||
.with(Layer::new().with_writer(non_blocking_file).with_ansi(false));
|
||||
|
||||
#[cfg(feature = "tracy")]
|
||||
let subscriber = {
|
||||
let tracy_subscriber = tracing_tracy::TracyLayer::new();
|
||||
subscriber.with(tracy_subscriber)
|
||||
};
|
||||
|
||||
subscriber.init();
|
||||
|
||||
let result = if opt.timedemo {
|
||||
time_demo::run_timedemo(preferences.cli)
|
||||
} else {
|
||||
App::new(preferences).and_then(|app| app.run())
|
||||
};
|
||||
|
||||
#[cfg(windows)]
|
||||
if let Err(error) = &result {
|
||||
eprintln!("{:?}", error)
|
||||
|
|
Loading…
Reference in New Issue