mirror of
https://github.com/YGGverse/nexy.git
synced 2026-03-31 09:15:28 +00:00
reorganize optional access log member
This commit is contained in:
parent
23c9c1b96e
commit
ddcb1b5744
3 changed files with 31 additions and 32 deletions
|
|
@ -56,14 +56,14 @@ impl Connection {
|
||||||
true
|
true
|
||||||
})
|
})
|
||||||
}) {
|
}) {
|
||||||
self.session
|
if let Some(ref a) = self.session.access_log {
|
||||||
.access_log
|
a.clf(&self.address.client, Some(&q), 0, t)
|
||||||
.clf(&self.address.client, Some(&q), 0, t);
|
}
|
||||||
self.shutdown()
|
self.shutdown()
|
||||||
} else {
|
} else {
|
||||||
self.session
|
if let Some(ref a) = self.session.access_log {
|
||||||
.access_log
|
a.clf(&self.address.client, Some(&q), 1, t)
|
||||||
.clf(&self.address.client, Some(&q), 1, t);
|
}
|
||||||
if self.session.is_debug {
|
if self.session.is_debug {
|
||||||
println!(
|
println!(
|
||||||
"[{}] - [{}] connection closed by client.",
|
"[{}] - [{}] connection closed by client.",
|
||||||
|
|
@ -87,9 +87,9 @@ impl Connection {
|
||||||
self.address.server, self.address.client
|
self.address.server, self.address.client
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
self.session
|
if let Some(ref a) = self.session.access_log {
|
||||||
.access_log
|
a.clf(&self.address.client, None, 2, t)
|
||||||
.clf(&self.address.client, None, 2, t);
|
}
|
||||||
self.shutdown()
|
self.shutdown()
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
@ -97,9 +97,9 @@ impl Connection {
|
||||||
"[{}] > [{}] handle request error: `{e}`",
|
"[{}] > [{}] handle request error: `{e}`",
|
||||||
self.address.server, self.address.client
|
self.address.server, self.address.client
|
||||||
);
|
);
|
||||||
self.session
|
if let Some(ref a) = self.session.access_log {
|
||||||
.access_log
|
a.clf(&self.address.client, None, 1, t)
|
||||||
.clf(&self.address.client, None, 1, t);
|
}
|
||||||
self.shutdown()
|
self.shutdown()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use {access_log::AccessLog, public::Public, request::Request, template::Template
|
||||||
|
|
||||||
/// Shared, multi-thread features for the current server session
|
/// Shared, multi-thread features for the current server session
|
||||||
pub struct Session {
|
pub struct Session {
|
||||||
pub access_log: AccessLog,
|
pub access_log: Option<AccessLog>,
|
||||||
pub public: Public,
|
pub public: Public,
|
||||||
pub request: Option<Request>,
|
pub request: Option<Request>,
|
||||||
pub template: Template,
|
pub template: Template,
|
||||||
|
|
|
||||||
|
|
@ -5,33 +5,32 @@
|
||||||
use std::{fs::File, io::Write, net::SocketAddr, sync::RwLock};
|
use std::{fs::File, io::Write, net::SocketAddr, sync::RwLock};
|
||||||
|
|
||||||
/// Writes log as
|
/// Writes log as
|
||||||
pub struct AccessLog(Option<RwLock<File>>);
|
pub struct AccessLog(RwLock<File>);
|
||||||
|
|
||||||
impl AccessLog {
|
impl AccessLog {
|
||||||
pub fn init(config: &crate::config::Config) -> anyhow::Result<Self> {
|
pub fn init(config: &crate::config::Config) -> anyhow::Result<Option<Self>> {
|
||||||
Ok(Self(match config.access_log {
|
Ok(match config.access_log {
|
||||||
Some(ref p) => Some(RwLock::new(File::create(p)?)),
|
Some(ref p) => Some(Self(RwLock::new(File::create(p)?))),
|
||||||
None => None,
|
None => None,
|
||||||
}))
|
})
|
||||||
}
|
}
|
||||||
/// [CLF](https://en.wikipedia.org/wiki/Common_Log_Format)
|
/// [CLF](https://en.wikipedia.org/wiki/Common_Log_Format)
|
||||||
///
|
///
|
||||||
/// * the code value (`u8`) is relative, use 1|0 for failure / success
|
/// * 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) {
|
pub fn clf(&self, client: &SocketAddr, query: Option<&str>, code: u8, size: usize) {
|
||||||
if let Some(ref f) = self.0 {
|
self.0
|
||||||
f.write()
|
.write()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.write_all(
|
.write_all(
|
||||||
format!(
|
format!(
|
||||||
"{} {} - [{}] \"GET {}\" {code} {size}\n",
|
"{} {} - [{}] \"GET {}\" {code} {size}\n",
|
||||||
client.ip(),
|
client.ip(),
|
||||||
client.port(),
|
client.port(),
|
||||||
chrono::Local::now().format("%d/%b/%Y:%H:%M:%S %z"),
|
chrono::Local::now().format("%d/%b/%Y:%H:%M:%S %z"),
|
||||||
query.unwrap_or_default(),
|
query.unwrap_or_default(),
|
||||||
)
|
|
||||||
.as_bytes(),
|
|
||||||
)
|
)
|
||||||
.unwrap()
|
.as_bytes(),
|
||||||
}
|
)
|
||||||
|
.unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue