提交 15c9fd0c authored 作者: Serhij S's avatar Serhij S

logger

上级 e9f8f530
[package] [package]
name = "roboplc" name = "roboplc"
version = "0.1.22" version = "0.1.23"
edition = "2021" edition = "2021"
authors = ["Serhij S. <div@altertech.com>"] authors = ["Serhij S. <div@altertech.com>"]
license = "Apache-2.0" license = "Apache-2.0"
...@@ -39,6 +39,8 @@ eva-sdk = { version = "0.3.45", features = ["controller"], optional = true } ...@@ -39,6 +39,8 @@ eva-sdk = { version = "0.3.45", features = ["controller"], optional = true }
busrt = { version = "0.4.9", features = ["rpc", "ipc"], optional = true } busrt = { version = "0.4.9", features = ["rpc", "ipc"], optional = true }
tokio = { version = "1.36.0", optional = true } tokio = { version = "1.36.0", optional = true }
hostname = { version = "0.3.1", optional = true } hostname = { version = "0.3.1", optional = true }
env_logger = "0.11.3"
log = "0.4.21"
[features] [features]
eapi = ["eva-common", "eva-sdk", "busrt", "tokio", "hostname"] eapi = ["eva-common", "eva-sdk", "busrt", "tokio", "hostname"]
...@@ -47,15 +49,14 @@ openssl-vendored = ["busrt/openssl-vendored", "eva-common/openssl-vendored"] ...@@ -47,15 +49,14 @@ openssl-vendored = ["busrt/openssl-vendored", "eva-common/openssl-vendored"]
full = ["eapi", "modbus"] full = ["eapi", "modbus"]
[dev-dependencies] [dev-dependencies]
env_logger = "0.11.3"
insta = "1.36.1" insta = "1.36.1"
log = "0.4.21" log = "0.4.21"
tokio = { version = "1.36.0", features = ["rt", "macros", "time"] } tokio = { version = "1.36.0", features = ["rt", "macros", "time"] }
tracing = { version = "0.1.40", features = ["log"] } tracing = { version = "0.1.40", features = ["log"] }
[[example]] [[example]]
name = "plc-modbus" name = "modbus-master"
path = "examples/plc-modbus.rs" path = "examples/modbus-master.rs"
required-features = ["modbus"] required-features = ["modbus"]
[[example]] [[example]]
......
...@@ -77,9 +77,7 @@ impl Worker<Message, Variables> for EAPIConnector { ...@@ -77,9 +77,7 @@ impl Worker<Message, Variables> for EAPIConnector {
} }
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> { fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
env_logger::builder() roboplc::configure_logger(roboplc::LevelFilter::Info);
.filter_level(log::LevelFilter::Info)
.init();
let eapi_config: EAPIConfig<Message, Variables> = EAPIConfig::new("/opt/eva4/var/bus.ipc") let eapi_config: EAPIConfig<Message, Variables> = EAPIConfig::new("/opt/eva4/var/bus.ipc")
.action_handler("unit:tests/fan".parse().unwrap(), |action, context| { .action_handler("unit:tests/fan".parse().unwrap(), |action, context| {
let params = action.take_unit_params()?; let params = action.take_unit_params()?;
......
...@@ -148,12 +148,9 @@ impl Worker<Message, Variables> for ModbusRelays1 { ...@@ -148,12 +148,9 @@ impl Worker<Message, Variables> for ModbusRelays1 {
// Main function, to start the controller and workers // Main function, to start the controller and workers
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
roboplc::configure_logger(roboplc::LevelFilter::Info);
// sets the simulated mode for the real-time module, do not set any thread real-time parameters // sets the simulated mode for the real-time module, do not set any thread real-time parameters
roboplc::thread_rt::set_simulated(); roboplc::thread_rt::set_simulated();
// initializes a debug logger
env_logger::builder()
.filter_level(log::LevelFilter::Info)
.init();
// creates a controller instance // creates a controller instance
let mut controller: Controller<Message, Variables> = Controller::new(); let mut controller: Controller<Message, Variables> = Controller::new();
// creates a reliable auto-reconnecting shared TCP port connection // creates a reliable auto-reconnecting shared TCP port connection
......
...@@ -93,6 +93,7 @@ impl Worker<Message, Variables> for ModbusSrv { ...@@ -93,6 +93,7 @@ impl Worker<Message, Variables> for ModbusSrv {
} }
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> { fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
roboplc::configure_logger(roboplc::LevelFilter::Info);
// for TCP // for TCP
let addr = "0.0.0.0:5552"; let addr = "0.0.0.0:5552";
// for RTU // for RTU
...@@ -100,9 +101,6 @@ fn main() -> std::result::Result<(), Box<dyn std::error::Error>> { ...@@ -100,9 +101,6 @@ fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
// Modbus Unit ID // Modbus Unit ID
let unit = 1; let unit = 1;
let timeout = Duration::from_secs(5); let timeout = Duration::from_secs(5);
env_logger::builder()
.filter_level(log::LevelFilter::Info)
.init();
let server = ModbusServer::bind(Protocol::Tcp, unit, addr, timeout, 1)?; let server = ModbusServer::bind(Protocol::Tcp, unit, addr, timeout, 1)?;
// Modbus server register mapping, can be specified with '@' or without // Modbus server register mapping, can be specified with '@' or without
let env_mapping = server.mapping("i@0".parse()?, 13); let env_mapping = server.mapping("i@0".parse()?, 13);
......
...@@ -95,10 +95,7 @@ impl Worker<Message, ()> for PrintEnv { ...@@ -95,10 +95,7 @@ impl Worker<Message, ()> for PrintEnv {
} }
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
// initializes a debug logger roboplc::configure_logger(roboplc::LevelFilter::Info);
env_logger::builder()
.filter_level(log::LevelFilter::Info)
.init();
// creates a controller instance // creates a controller instance
let mut controller = Controller::<Message, ()>::new(); let mut controller = Controller::<Message, ()>::new();
// spawns workers // spawns workers
......
...@@ -106,9 +106,7 @@ impl Worker<Message, ()> for SignalHandler { ...@@ -106,9 +106,7 @@ impl Worker<Message, ()> for SignalHandler {
} }
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::builder() roboplc::configure_logger(roboplc::LevelFilter::Info);
.filter_level(log::LevelFilter::Info)
.init();
let mut controller = Controller::<Message, ()>::new(); let mut controller = Controller::<Message, ()>::new();
controller.spawn_worker(DataGenerator {})?; controller.spawn_worker(DataGenerator {})?;
controller.spawn_worker(DataParser {})?; controller.spawn_worker(DataParser {})?;
......
#![ doc = include_str!( concat!( env!( "CARGO_MANIFEST_DIR" ), "/", "README.md" ) ) ] #![ doc = include_str!( concat!( env!( "CARGO_MANIFEST_DIR" ), "/", "README.md" ) ) ]
use core::{fmt, num}; use core::{fmt, num};
use std::{mem, str::FromStr, sync::Arc, time::Duration}; use std::{env, mem, str::FromStr, sync::Arc, time::Duration};
use thread_rt::{RTParams, Scheduling}; use thread_rt::{RTParams, Scheduling};
pub use log::LevelFilter;
pub use roboplc_derive::DataPolicy; pub use roboplc_derive::DataPolicy;
/// Event buffers /// Event buffers
...@@ -231,6 +232,23 @@ pub fn suicide(delay: Duration, warn: bool) { ...@@ -231,6 +232,23 @@ pub fn suicide(delay: Duration, warn: bool) {
impl DataDeliveryPolicy for () {} impl DataDeliveryPolicy for () {}
impl DataDeliveryPolicy for usize {} impl DataDeliveryPolicy for usize {}
/// Returns true if started in production mode (as a systemd unit)
pub fn is_production() -> bool {
env::var("INVOCATION_ID").map_or(false, |v| !v.is_empty())
}
/// Configures stdout logger with the given filter
/// If started in production mode, does not logs timestamps
pub fn configure_logger(filter: LevelFilter) {
let mut builder = env_logger::Builder::new();
builder.target(env_logger::Target::Stdout);
builder.filter_level(filter);
if is_production() {
builder.format_timestamp(None);
}
builder.init();
}
pub mod prelude { pub mod prelude {
pub use super::suicide; pub use super::suicide;
pub use crate::controller::*; pub use crate::controller::*;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论