desktop: Log to ruffle.log in addition to stdout

This commit is contained in:
Nathan Adams 2024-03-08 23:41:04 +01:00
parent 4927baf290
commit 6585ffdd28
4 changed files with 54 additions and 24 deletions

13
Cargo.lock generated
View File

@ -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"

View File

@ -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"

View File

@ -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,

View File

@ -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)