You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2023/02/11 03:04:30 UTC

[skywalking-php] branch master updated: Avoid potential panic for logger. (#54)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-php.git


The following commit(s) were added to refs/heads/master by this push:
     new 9fb087b  Avoid potential panic for logger. (#54)
9fb087b is described below

commit 9fb087bc32a54fa79841df5b67157af6dc87473e
Author: jmjoy <jm...@apache.org>
AuthorDate: Sat Feb 11 11:04:24 2023 +0800

    Avoid potential panic for logger. (#54)
    
    * Avoid potential panic for logger.
    
    * Print error message.
---
 Cargo.lock    | 42 ------------------------------------------
 Cargo.toml    |  1 -
 src/module.rs | 53 +++++++++++++++++++++++++++++++++--------------------
 3 files changed, 33 insertions(+), 63 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 3521404..2bbc12e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -380,25 +380,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "crossbeam-channel"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
-dependencies = [
- "cfg-if",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-utils"
-version = "0.8.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
-dependencies = [
- "cfg-if",
-]
-
 [[package]]
 name = "crypto-common"
 version = "0.1.6"
@@ -2071,7 +2052,6 @@ dependencies = [
  "tokio-stream",
  "tonic",
  "tracing",
- "tracing-appender",
  "tracing-subscriber",
  "url",
 ]
@@ -2244,10 +2224,8 @@ version = "0.3.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
 dependencies = [
- "itoa",
  "serde",
  "time-core",
- "time-macros",
 ]
 
 [[package]]
@@ -2256,15 +2234,6 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
 
-[[package]]
-name = "time-macros"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
-dependencies = [
- "time-core",
-]
-
 [[package]]
 name = "tinyvec"
 version = "1.6.0"
@@ -2478,17 +2447,6 @@ dependencies = [
  "tracing-core",
 ]
 
-[[package]]
-name = "tracing-appender"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
-dependencies = [
- "crossbeam-channel",
- "time 0.3.17",
- "tracing-subscriber",
-]
-
 [[package]]
 name = "tracing-attributes"
 version = "0.1.23"
diff --git a/Cargo.toml b/Cargo.toml
index e9ea310..3e7a516 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -54,7 +54,6 @@ tokio = { version = "1.24.2", features = ["full"] }
 tokio-stream = "0.1.11"
 tonic = { version = "0.8.3", features = ["tls"] }
 tracing = { version = "0.1.37", features = ["attributes"] }
-tracing-appender = "0.2.2"
 tracing-subscriber = "0.3.16"
 url = "2.3.1"
 
diff --git a/src/module.rs b/src/module.rs
index dc99ced..1848c35 100644
--- a/src/module.rs
+++ b/src/module.rs
@@ -25,6 +25,7 @@ use crate::{
     SKYWALKING_AGENT_SSL_CERT_CHAIN_PATH, SKYWALKING_AGENT_SSL_KEY_PATH,
     SKYWALKING_AGENT_SSL_TRUSTED_CA_PATH,
 };
+use anyhow::bail;
 use once_cell::sync::Lazy;
 use phper::{arrays::ZArr, ini::ini_get, sys};
 use skywalking::{
@@ -34,7 +35,7 @@ use skywalking::{
 use std::{
     borrow::ToOwned,
     ffi::{CStr, OsStr},
-    fs,
+    fs::{self, OpenOptions},
     os::unix::prelude::OsStrExt,
     path::{Path, PathBuf},
     str::FromStr,
@@ -121,7 +122,9 @@ pub fn init() {
         return;
     }
 
-    init_logger();
+    if let Err(err) = try_init_logger() {
+        eprintln!("skywalking_agent: initialize logger failed: {}", err);
+    }
 
     // Skywalking agent info.
     let service_name = Lazy::force(&SERVICE_NAME);
@@ -185,35 +188,45 @@ pub fn init() {
 
 pub fn shutdown() {}
 
-fn init_logger() {
+fn try_init_logger() -> anyhow::Result<()> {
     let log_level = ini_get::<Option<&CStr>>(SKYWALKING_AGENT_LOG_LEVEL)
         .and_then(|s| s.to_str().ok())
         .unwrap_or("OFF");
     let log_level = log_level.trim();
 
+    let log_level = LevelFilter::from_str(log_level)?;
+    if log_level == LevelFilter::OFF {
+        return Ok(());
+    }
+
     let log_file = ini_get::<Option<&CStr>>(SKYWALKING_AGENT_LOG_FILE)
         .and_then(|s| s.to_str().ok())
         .unwrap_or_default();
     let log_file = log_file.trim();
+    if log_file.is_empty() {
+        bail!("log file cant't be empty when log enabled");
+    }
 
-    if !log_file.is_empty() {
-        if let Ok(log_level) = LevelFilter::from_str(log_level) {
-            let log_file = Path::new(log_file);
-            if let Some(dir) = log_file.parent() {
-                if let Some(file_name) = log_file.file_name() {
-                    let file_appender = tracing_appender::rolling::never(dir, file_name);
-                    let subscriber = FmtSubscriber::builder()
-                        .with_max_level(log_level)
-                        .with_ansi(false)
-                        .with_writer(file_appender)
-                        .finish();
-
-                    tracing::subscriber::set_global_default(subscriber)
-                        .expect("setting default subscriber failed");
-                }
-            }
-        }
+    let path = Path::new(log_file);
+
+    if let Some(parent) = path.parent() {
+        fs::create_dir_all(parent)?;
     }
+
+    let mut open_options = OpenOptions::new();
+    open_options.append(true).create(true);
+
+    let file = open_options.open(path)?;
+
+    let subscriber = FmtSubscriber::builder()
+        .with_max_level(log_level)
+        .with_ansi(false)
+        .with_writer(file)
+        .finish();
+
+    tracing::subscriber::set_global_default(subscriber)?;
+
+    Ok(())
 }
 
 fn get_module_registry() -> &'static ZArr {