reorganize optional access log member

This commit is contained in:
yggverse 2025-06-29 15:06:30 +03:00
parent 23c9c1b96e
commit ddcb1b5744
3 changed files with 31 additions and 32 deletions

View file

@ -56,14 +56,14 @@ impl Connection {
true
})
}) {
self.session
.access_log
.clf(&self.address.client, Some(&q), 0, t);
if let Some(ref a) = self.session.access_log {
a.clf(&self.address.client, Some(&q), 0, t)
}
self.shutdown()
} else {
self.session
.access_log
.clf(&self.address.client, Some(&q), 1, t);
if let Some(ref a) = self.session.access_log {
a.clf(&self.address.client, Some(&q), 1, t)
}
if self.session.is_debug {
println!(
"[{}] - [{}] connection closed by client.",
@ -87,9 +87,9 @@ impl Connection {
self.address.server, self.address.client
)
};
self.session
.access_log
.clf(&self.address.client, None, 2, t);
if let Some(ref a) = self.session.access_log {
a.clf(&self.address.client, None, 2, t)
}
self.shutdown()
}
Err(e) => {
@ -97,9 +97,9 @@ impl Connection {
"[{}] > [{}] handle request error: `{e}`",
self.address.server, self.address.client
);
self.session
.access_log
.clf(&self.address.client, None, 1, t);
if let Some(ref a) = self.session.access_log {
a.clf(&self.address.client, None, 1, t)
}
self.shutdown()
}
},

View file

@ -7,7 +7,7 @@ use {access_log::AccessLog, public::Public, request::Request, template::Template
/// Shared, multi-thread features for the current server session
pub struct Session {
pub access_log: AccessLog,
pub access_log: Option<AccessLog>,
pub public: Public,
pub request: Option<Request>,
pub template: Template,

View file

@ -5,21 +5,21 @@
use std::{fs::File, io::Write, net::SocketAddr, sync::RwLock};
/// Writes log as
pub struct AccessLog(Option<RwLock<File>>);
pub struct AccessLog(RwLock<File>);
impl AccessLog {
pub fn init(config: &crate::config::Config) -> anyhow::Result<Self> {
Ok(Self(match config.access_log {
Some(ref p) => Some(RwLock::new(File::create(p)?)),
pub fn init(config: &crate::config::Config) -> anyhow::Result<Option<Self>> {
Ok(match config.access_log {
Some(ref p) => Some(Self(RwLock::new(File::create(p)?))),
None => None,
}))
})
}
/// [CLF](https://en.wikipedia.org/wiki/Common_Log_Format)
///
/// * the code value (`u8`) is relative, use 1|0 for failure / success
pub fn clf(&self, client: &SocketAddr, query: Option<&str>, code: u8, size: usize) {
if let Some(ref f) = self.0 {
f.write()
self.0
.write()
.unwrap()
.write_all(
format!(
@ -34,4 +34,3 @@ impl AccessLog {
.unwrap()
}
}
}