mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-06-14 14:27:48 +02:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 647d8894fe | |||
| 5ec310199f | |||
| bb09c7ca6e | |||
| 20a1d24ee0 | |||
| fa275731be |
+13
-28
@@ -9,7 +9,17 @@
|
||||
"url": "https://registry.npmjs.com/${ pkg.pkgFile.pkg.name }/${ pkg.pkgFile.version }"
|
||||
}
|
||||
},
|
||||
"publish": ["pnpm build", "pnpm publish --access public --no-git-checks"]
|
||||
"publish": [
|
||||
{
|
||||
"command": "pnpm build",
|
||||
"dryRunCommand": "pnpm build"
|
||||
},
|
||||
{
|
||||
"command": "npm publish --provenance --access public",
|
||||
"dryRunCommand": "npm publish --provenance --access public --dry-run",
|
||||
"pipe": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"rust": {
|
||||
"version": true,
|
||||
@@ -20,17 +30,13 @@
|
||||
}
|
||||
},
|
||||
"publish": [
|
||||
{
|
||||
"command": "cargo package --no-verify",
|
||||
"dryRunCommand": true
|
||||
},
|
||||
{
|
||||
"command": "echo '<details>\n<summary><em><h4>Cargo Publish</h4></em></summary>\n\n```'",
|
||||
"dryRunCommand": true,
|
||||
"pipe": true
|
||||
},
|
||||
{
|
||||
"command": "cargo publish",
|
||||
"command": "cargo publish --no-verify",
|
||||
"dryRunCommand": "cargo publish --dry-run",
|
||||
"pipe": true
|
||||
},
|
||||
@@ -256,28 +262,7 @@
|
||||
},
|
||||
"sql": {
|
||||
"path": "./plugins/sql",
|
||||
"manager": "rust",
|
||||
"publish": [
|
||||
{
|
||||
"command": "cargo package --no-verify",
|
||||
"dryRunCommand": true
|
||||
},
|
||||
{
|
||||
"command": "echo '<details>\n<summary><em><h4>Cargo Publish</h4></em></summary>\n\n```'",
|
||||
"dryRunCommand": true,
|
||||
"pipe": true
|
||||
},
|
||||
{
|
||||
"command": "cargo publish --features sqlite",
|
||||
"dryRunCommand": "cargo publish --features sqlite --dry-run",
|
||||
"pipe": true
|
||||
},
|
||||
{
|
||||
"command": "echo '```\n\n</details>\n'",
|
||||
"dryRunCommand": true,
|
||||
"pipe": true
|
||||
}
|
||||
]
|
||||
"manager": "rust"
|
||||
},
|
||||
"sql-js": {
|
||||
"path": "./plugins/sql",
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"log-plugin": patch
|
||||
---
|
||||
|
||||
Added `Builder::split` which returns the raw logger implementation so you can pipe to other loggers such as `multi_log` or `tauri-plugin-devtools`.
|
||||
@@ -61,6 +61,7 @@
|
||||
".changes/http-unsafe-headers.md",
|
||||
".changes/http-user-agent.md",
|
||||
".changes/impl-ext-for-webview-windows.md",
|
||||
".changes/log-split.md",
|
||||
".changes/msrv-1.75.md",
|
||||
".changes/named-tempfile-updater-windows.md",
|
||||
".changes/notifcation-permission-commands.md",
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: covector comment
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: [covector status] # the `name` of the workflow run on `pull_request` running `status` with `comment: true`
|
||||
types:
|
||||
- completed
|
||||
|
||||
# note all other permissions are set to none if not specified
|
||||
# and these set the permissions for `secrets.GITHUB_TOKEN`
|
||||
permissions:
|
||||
# to read the action artifacts on `covector status` workflows
|
||||
actions: read
|
||||
# to write the comment
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
download:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.workflow_run.conclusion == 'success' &&
|
||||
(github.event.workflow_run.head_repository.full_name != github.repository || github.actor == 'dependabot[bot]')
|
||||
steps:
|
||||
- name: covector status
|
||||
uses: jbolda/covector/packages/action@covector-v0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
command: "status"
|
||||
@@ -1,76 +0,0 @@
|
||||
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: version or publish
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v2
|
||||
|
||||
jobs:
|
||||
version-or-publish:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 65
|
||||
outputs:
|
||||
change: ${{ steps.covector.outputs.change }}
|
||||
commandRan: ${{ steps.covector.outputs.commandRan }}
|
||||
successfulPublish: ${{ steps.covector.outputs.successfulPublish }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # required for use of git history
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "lts/*"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9.x.x
|
||||
run_install: true
|
||||
|
||||
- name: install webkit2gtk and libudev for [authenticator]
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev
|
||||
|
||||
- name: cargo login
|
||||
run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }}
|
||||
|
||||
- name: git config
|
||||
run: |
|
||||
git config --global user.name "${{ github.event.pusher.name }}"
|
||||
git config --global user.email "${{ github.event.pusher.email }}"
|
||||
|
||||
- name: Setup target dir on /mnt
|
||||
run: |
|
||||
sudo mkdir /mnt/target
|
||||
WORKSPACE_OWNER="$(stat -c '%U:%G' "${GITHUB_WORKSPACE}")"
|
||||
sudo chown -R "${WORKSPACE_OWNER}" /mnt/target
|
||||
|
||||
- name: covector version or publish (publish when no change files present)
|
||||
uses: jbolda/covector/packages/action@covector-v0
|
||||
id: covector
|
||||
env:
|
||||
CARGO_TARGET_DIR: /mnt/target
|
||||
NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }}
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
command: "version-or-publish"
|
||||
createRelease: true
|
||||
recognizeContributors: true
|
||||
|
||||
- name: Create Pull Request With Versions Bumped
|
||||
id: cpr
|
||||
uses: tauri-apps/create-pull-request@v3
|
||||
if: steps.covector.outputs.commandRan == 'version'
|
||||
with:
|
||||
title: "Publish New Versions (v2)"
|
||||
commit-message: "publish new versions"
|
||||
labels: "version updates"
|
||||
branch: "ci/release-v2"
|
||||
body: ${{ steps.covector.outputs.change }}
|
||||
@@ -8,6 +8,15 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- v1
|
||||
- v2
|
||||
|
||||
permissions:
|
||||
# required for npm provenance
|
||||
id-token: write
|
||||
# required to create the GitHub Release
|
||||
contents: write
|
||||
# required for creating the Version Packages Release
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
version-or-publish:
|
||||
@@ -33,11 +42,6 @@ jobs:
|
||||
version: 9.x.x
|
||||
run_install: true
|
||||
|
||||
- name: install webkit2gtk and libudev for [authenticator]
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev
|
||||
|
||||
- name: cargo login
|
||||
run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }}
|
||||
|
||||
@@ -46,10 +50,18 @@ jobs:
|
||||
git config --global user.name "${{ github.event.pusher.name }}"
|
||||
git config --global user.email "${{ github.event.pusher.email }}"
|
||||
|
||||
- name: Setup target dir on /mnt
|
||||
# This directory has a larger partition size
|
||||
run: |
|
||||
sudo mkdir /mnt/target
|
||||
WORKSPACE_OWNER="$(stat -c '%U:%G' "${GITHUB_WORKSPACE}")"
|
||||
sudo chown -R "${WORKSPACE_OWNER}" /mnt/target
|
||||
|
||||
- name: covector version or publish (publish when no change files present)
|
||||
uses: jbolda/covector/packages/action@covector-v0
|
||||
id: covector
|
||||
env:
|
||||
CARGO_TARGET_DIR: /mnt/target
|
||||
NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }}
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -57,13 +69,17 @@ jobs:
|
||||
createRelease: true
|
||||
recognizeContributors: true
|
||||
|
||||
- name: Sync Cargo.lock
|
||||
if: steps.covector.outputs.commandRan == 'version'
|
||||
run: cargo tree --depth 0
|
||||
|
||||
- name: Create Pull Request With Versions Bumped
|
||||
id: cpr
|
||||
uses: tauri-apps/create-pull-request@v3
|
||||
if: steps.covector.outputs.commandRan == 'version'
|
||||
with:
|
||||
title: "Publish New Versions"
|
||||
title: "Publish New Versions (${{ github.ref_name }})"
|
||||
commit-message: "publish new versions"
|
||||
labels: "version updates"
|
||||
branch: "ci/release-v1"
|
||||
branch: "ci/release-${{ github.ref_name }}"
|
||||
body: ${{ steps.covector.outputs.change }}
|
||||
|
||||
Generated
+6
-5
@@ -200,7 +200,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||
|
||||
[[package]]
|
||||
name = "api"
|
||||
version = "2.0.0-beta.13"
|
||||
version = "2.0.0-beta.15"
|
||||
dependencies = [
|
||||
"log",
|
||||
"serde",
|
||||
@@ -6589,7 +6589,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-log"
|
||||
version = "2.0.0-beta.8"
|
||||
version = "2.0.0-beta.9"
|
||||
dependencies = [
|
||||
"android_logger",
|
||||
"byte-unit",
|
||||
@@ -6603,6 +6603,7 @@ dependencies = [
|
||||
"swift-rs",
|
||||
"tauri",
|
||||
"tauri-plugin",
|
||||
"thiserror",
|
||||
"time",
|
||||
]
|
||||
|
||||
@@ -6621,7 +6622,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-notification"
|
||||
version = "2.0.0-beta.10"
|
||||
version = "2.0.0-beta.11"
|
||||
dependencies = [
|
||||
"color-backtrace",
|
||||
"ctor",
|
||||
@@ -6727,7 +6728,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-sql"
|
||||
version = "2.0.0-beta.9"
|
||||
version = "2.0.0-beta.10"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"indexmap 2.2.6",
|
||||
@@ -6778,7 +6779,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tauri-plugin-updater"
|
||||
version = "2.0.0-beta.10"
|
||||
version = "2.0.0-beta.11"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"dirs 5.0.1",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
## \[2.0.0-beta.15]
|
||||
|
||||
### Dependencies
|
||||
|
||||
- Upgraded to `log-plugin@2.0.0-beta.9`
|
||||
|
||||
## \[2.0.0-beta.14]
|
||||
|
||||
### Dependencies
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "api"
|
||||
publish = false
|
||||
version = "2.0.0-beta.14"
|
||||
version = "2.0.0-beta.15"
|
||||
description = "An example Tauri Application showcasing the api"
|
||||
edition = "2021"
|
||||
rust-version = { workspace = true }
|
||||
@@ -19,7 +19,7 @@ serde_json = { workspace = true }
|
||||
serde = { workspace = true }
|
||||
tiny_http = "0.12"
|
||||
log = { workspace = true }
|
||||
tauri-plugin-log = { path = "../../../plugins/log", version = "2.0.0-beta.8" }
|
||||
tauri-plugin-log = { path = "../../../plugins/log", version = "2.0.0-beta.9" }
|
||||
tauri-plugin-fs = { path = "../../../plugins/fs", version = "2.0.0-beta.11", features = [ "watch" ] }
|
||||
tauri-plugin-clipboard-manager = { path = "../../../plugins/clipboard-manager", version = "2.1.0-beta.6" }
|
||||
tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "2.0.0-beta.11" }
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## \[2.0.0-beta.9]
|
||||
|
||||
- [`20a1d24e`](https://github.com/tauri-apps/plugins-workspace/commit/20a1d24ee004e77c2d12a0e20d258ce120216ed1) ([#1579](https://github.com/tauri-apps/plugins-workspace/pull/1579) by [@lucasfernog](https://github.com/tauri-apps/plugins-workspace/../../lucasfernog)) Added `Builder::split` which returns the raw logger implementation so you can pipe to other loggers such as `multi_log` or `tauri-plugin-devtools`.
|
||||
|
||||
## \[2.0.0-beta.8]
|
||||
|
||||
- [`22a17980`](https://github.com/tauri-apps/plugins-workspace/commit/22a17980ff4f6f8c40adb1b8f4ffc6dae2fe7e30) ([#1537](https://github.com/tauri-apps/plugins-workspace/pull/1537) by [@lucasfernog](https://github.com/tauri-apps/plugins-workspace/../../lucasfernog)) Update to tauri beta.24.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "tauri-plugin-log"
|
||||
version = "2.0.0-beta.8"
|
||||
version = "2.0.0-beta.9"
|
||||
description = "Configurable logging for your Tauri app."
|
||||
authors = { workspace = true }
|
||||
license = { workspace = true }
|
||||
@@ -25,6 +25,7 @@ byte-unit = "5"
|
||||
log = { workspace = true, features = [ "kv_unstable" ] }
|
||||
time = { version = "0.3", features = [ "formatting", "local-offset" ] }
|
||||
fern = "0.6"
|
||||
thiserror = "1"
|
||||
|
||||
[target."cfg(target_os = \"android\")".dependencies]
|
||||
android_logger = "0.14"
|
||||
|
||||
+147
-88
@@ -24,11 +24,11 @@ use std::{
|
||||
iter::FromIterator,
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
use tauri::Emitter;
|
||||
use tauri::{
|
||||
plugin::{self, TauriPlugin},
|
||||
Manager, Runtime,
|
||||
};
|
||||
use tauri::{AppHandle, Emitter};
|
||||
|
||||
pub use fern;
|
||||
use time::OffsetDateTime;
|
||||
@@ -75,6 +75,18 @@ const DEFAULT_LOG_TARGETS: [Target; 2] = [
|
||||
Target::new(TargetKind::LogDir { file_name: None }),
|
||||
];
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum Error {
|
||||
#[error(transparent)]
|
||||
Tauri(#[from] tauri::Error),
|
||||
#[error(transparent)]
|
||||
Io(#[from] std::io::Error),
|
||||
#[error(transparent)]
|
||||
TimeFormat(#[from] time::error::Format),
|
||||
#[error(transparent)]
|
||||
InvalidFormatDescription(#[from] time::error::InvalidFormatDescription),
|
||||
}
|
||||
|
||||
/// An enum representing the available verbosity levels of the logger.
|
||||
///
|
||||
/// It is very similar to the [`log::Level`], but serializes to unsigned ints instead of strings.
|
||||
@@ -395,97 +407,134 @@ impl Builder {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn build<R: Runtime>(mut self) -> TauriPlugin<R> {
|
||||
plugin::Builder::new("log")
|
||||
.invoke_handler(tauri::generate_handler![log])
|
||||
.setup(move |app_handle, _api| {
|
||||
let app_name = &app_handle.package_info().name;
|
||||
fn acquire_logger<R: Runtime>(
|
||||
app_handle: &AppHandle<R>,
|
||||
mut dispatch: fern::Dispatch,
|
||||
rotation_strategy: RotationStrategy,
|
||||
timezone_strategy: TimezoneStrategy,
|
||||
max_file_size: u128,
|
||||
targets: Vec<Target>,
|
||||
) -> Result<(log::LevelFilter, Box<dyn log::Log>), Error> {
|
||||
let app_name = &app_handle.package_info().name;
|
||||
|
||||
// setup targets
|
||||
for target in self.targets {
|
||||
let mut target_dispatch = fern::Dispatch::new();
|
||||
for filter in target.filters {
|
||||
target_dispatch = target_dispatch.filter(filter);
|
||||
// setup targets
|
||||
for target in targets {
|
||||
let mut target_dispatch = fern::Dispatch::new();
|
||||
for filter in target.filters {
|
||||
target_dispatch = target_dispatch.filter(filter);
|
||||
}
|
||||
|
||||
let logger = match target.kind {
|
||||
#[cfg(target_os = "android")]
|
||||
TargetKind::Stdout | TargetKind::Stderr => fern::Output::call(android_logger::log),
|
||||
#[cfg(target_os = "ios")]
|
||||
TargetKind::Stdout | TargetKind::Stderr => fern::Output::call(move |record| {
|
||||
let message = format!("{}", record.args());
|
||||
unsafe {
|
||||
ios::tauri_log(
|
||||
match record.level() {
|
||||
log::Level::Trace | log::Level::Debug => 1,
|
||||
log::Level::Info => 2,
|
||||
log::Level::Warn | log::Level::Error => 3,
|
||||
},
|
||||
ios::NSString::new(message.as_str()).0 as _,
|
||||
);
|
||||
}
|
||||
}),
|
||||
#[cfg(desktop)]
|
||||
TargetKind::Stdout => std::io::stdout().into(),
|
||||
#[cfg(desktop)]
|
||||
TargetKind::Stderr => std::io::stderr().into(),
|
||||
TargetKind::Folder { path, file_name } => {
|
||||
if !path.exists() {
|
||||
fs::create_dir_all(&path)?;
|
||||
}
|
||||
|
||||
let logger = match target.kind {
|
||||
#[cfg(target_os = "android")]
|
||||
TargetKind::Stdout | TargetKind::Stderr => {
|
||||
fern::Output::call(android_logger::log)
|
||||
}
|
||||
#[cfg(target_os = "ios")]
|
||||
TargetKind::Stdout | TargetKind::Stderr => {
|
||||
fern::Output::call(move |record| {
|
||||
let message = format!("{}", record.args());
|
||||
unsafe {
|
||||
ios::tauri_log(
|
||||
match record.level() {
|
||||
log::Level::Trace | log::Level::Debug => 1,
|
||||
log::Level::Info => 2,
|
||||
log::Level::Warn | log::Level::Error => 3,
|
||||
},
|
||||
ios::NSString::new(message.as_str()).0 as _,
|
||||
);
|
||||
}
|
||||
})
|
||||
}
|
||||
#[cfg(desktop)]
|
||||
TargetKind::Stdout => std::io::stdout().into(),
|
||||
#[cfg(desktop)]
|
||||
TargetKind::Stderr => std::io::stderr().into(),
|
||||
TargetKind::Folder { path, file_name } => {
|
||||
if !path.exists() {
|
||||
fs::create_dir_all(&path)?;
|
||||
}
|
||||
|
||||
fern::log_file(get_log_file_path(
|
||||
&path,
|
||||
file_name.as_deref().unwrap_or(app_name),
|
||||
&self.rotation_strategy,
|
||||
&self.timezone_strategy,
|
||||
self.max_file_size,
|
||||
)?)?
|
||||
.into()
|
||||
}
|
||||
#[cfg(mobile)]
|
||||
TargetKind::LogDir { .. } => continue,
|
||||
#[cfg(desktop)]
|
||||
TargetKind::LogDir { file_name } => {
|
||||
let path = app_handle.path().app_log_dir()?;
|
||||
if !path.exists() {
|
||||
fs::create_dir_all(&path)?;
|
||||
}
|
||||
|
||||
fern::log_file(get_log_file_path(
|
||||
&path,
|
||||
file_name.as_deref().unwrap_or(app_name),
|
||||
&self.rotation_strategy,
|
||||
&self.timezone_strategy,
|
||||
self.max_file_size,
|
||||
)?)?
|
||||
.into()
|
||||
}
|
||||
TargetKind::Webview => {
|
||||
let app_handle = app_handle.clone();
|
||||
|
||||
fern::Output::call(move |record| {
|
||||
let payload = RecordPayload {
|
||||
message: record.args().to_string(),
|
||||
level: record.level().into(),
|
||||
};
|
||||
let app_handle = app_handle.clone();
|
||||
tauri::async_runtime::spawn(async move {
|
||||
let _ = app_handle.emit("log://log", payload);
|
||||
});
|
||||
})
|
||||
}
|
||||
};
|
||||
target_dispatch = target_dispatch.chain(logger);
|
||||
|
||||
self.dispatch = self.dispatch.chain(target_dispatch);
|
||||
fern::log_file(get_log_file_path(
|
||||
&path,
|
||||
file_name.as_deref().unwrap_or(app_name),
|
||||
&rotation_strategy,
|
||||
&timezone_strategy,
|
||||
max_file_size,
|
||||
)?)?
|
||||
.into()
|
||||
}
|
||||
#[cfg(mobile)]
|
||||
TargetKind::LogDir { .. } => continue,
|
||||
#[cfg(desktop)]
|
||||
TargetKind::LogDir { file_name } => {
|
||||
let path = app_handle.path().app_log_dir()?;
|
||||
if !path.exists() {
|
||||
fs::create_dir_all(&path)?;
|
||||
}
|
||||
|
||||
self.dispatch.apply()?;
|
||||
fern::log_file(get_log_file_path(
|
||||
&path,
|
||||
file_name.as_deref().unwrap_or(app_name),
|
||||
&rotation_strategy,
|
||||
&timezone_strategy,
|
||||
max_file_size,
|
||||
)?)?
|
||||
.into()
|
||||
}
|
||||
TargetKind::Webview => {
|
||||
let app_handle = app_handle.clone();
|
||||
|
||||
fern::Output::call(move |record| {
|
||||
let payload = RecordPayload {
|
||||
message: record.args().to_string(),
|
||||
level: record.level().into(),
|
||||
};
|
||||
let app_handle = app_handle.clone();
|
||||
tauri::async_runtime::spawn(async move {
|
||||
let _ = app_handle.emit("log://log", payload);
|
||||
});
|
||||
})
|
||||
}
|
||||
};
|
||||
target_dispatch = target_dispatch.chain(logger);
|
||||
|
||||
dispatch = dispatch.chain(target_dispatch);
|
||||
}
|
||||
|
||||
Ok(dispatch.into_log())
|
||||
}
|
||||
|
||||
fn plugin_builder<R: Runtime>() -> plugin::Builder<R> {
|
||||
plugin::Builder::new("log").invoke_handler(tauri::generate_handler![log])
|
||||
}
|
||||
|
||||
#[allow(clippy::type_complexity)]
|
||||
pub fn split<R: Runtime>(
|
||||
self,
|
||||
app_handle: &AppHandle<R>,
|
||||
) -> Result<(TauriPlugin<R>, log::LevelFilter, Box<dyn log::Log>), Error> {
|
||||
let plugin = Self::plugin_builder();
|
||||
let (max_level, log) = Self::acquire_logger(
|
||||
app_handle,
|
||||
self.dispatch,
|
||||
self.rotation_strategy,
|
||||
self.timezone_strategy,
|
||||
self.max_file_size,
|
||||
self.targets,
|
||||
)?;
|
||||
|
||||
Ok((plugin.build(), max_level, log))
|
||||
}
|
||||
|
||||
pub fn build<R: Runtime>(self) -> TauriPlugin<R> {
|
||||
Self::plugin_builder()
|
||||
.setup(move |app_handle, _api| {
|
||||
let (max_level, log) = Self::acquire_logger(
|
||||
app_handle,
|
||||
self.dispatch,
|
||||
self.rotation_strategy,
|
||||
self.timezone_strategy,
|
||||
self.max_file_size,
|
||||
self.targets,
|
||||
)?;
|
||||
|
||||
attach_logger(max_level, log)?;
|
||||
|
||||
Ok(())
|
||||
})
|
||||
@@ -493,13 +542,23 @@ impl Builder {
|
||||
}
|
||||
}
|
||||
|
||||
/// Attaches the given logger
|
||||
pub fn attach_logger(
|
||||
max_level: log::LevelFilter,
|
||||
log: Box<dyn log::Log>,
|
||||
) -> Result<(), log::SetLoggerError> {
|
||||
log::set_boxed_logger(log)?;
|
||||
log::set_max_level(max_level);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_log_file_path(
|
||||
dir: &impl AsRef<Path>,
|
||||
file_name: &str,
|
||||
rotation_strategy: &RotationStrategy,
|
||||
timezone_strategy: &TimezoneStrategy,
|
||||
max_file_size: u128,
|
||||
) -> Result<PathBuf, Box<dyn std::error::Error>> {
|
||||
) -> Result<PathBuf, Error> {
|
||||
let path = dir.as_ref().join(format!("{file_name}.log"));
|
||||
|
||||
if path.exists() {
|
||||
|
||||
Reference in New Issue
Block a user