blob: 4d86a5dec2ce94d72270d9f0da9ca68316a64f5b [file] [log] [blame]
//! Tests!
#![cfg(all(not(windows), feature = "reopen-1"))]
use std::{fs, io, io::prelude::*};
use log::Level::*;
mod support;
use support::manual_log;
#[test]
fn test_basic_logging_reopen_logging() {
// Create a temporary directory to put a log file into for testing
let temp_log_dir = tempfile::tempdir().expect("Failed to set up temporary directory");
let log_file = temp_log_dir.path().join("test.log");
{
// Create a basic logger configuration
let (_max_level, logger) = fern::Dispatch::new()
.format(|out, msg, record| out.finish(format_args!("[{}] {}", record.level(), msg)))
.level(log::LevelFilter::Info)
.chain(io::stdout())
.chain(fern::log_reopen1(&log_file, None).expect("Failed to open log file"))
.into_log();
let l = &*logger;
manual_log(l, Trace, "SHOULD NOT DISPLAY");
manual_log(l, Debug, "SHOULD NOT DISPLAY");
manual_log(l, Info, "Test information message");
manual_log(l, Warn, "Test warning message");
manual_log(l, Error, "Test error message");
// ensure all File objects are dropped and OS buffers are flushed.
log::logger().flush();
{
let result = {
let mut log_read = fs::File::open(temp_log_dir.path().join("test.log")).unwrap();
let mut buf = String::new();
log_read.read_to_string(&mut buf).unwrap();
buf
};
assert!(
!result.contains("SHOULD NOT DISPLAY"),
"expected result not including \"SHOULD_NOT_DISPLAY\", found:\n```\n{}\n```\n",
result
);
assert!(
result.contains("[INFO] Test information message"),
"expected result including \"[INFO] Test information message\", found:\n```\n{}\n```\n",
result
);
assert!(
result.contains("[WARN] Test warning message"),
"expected result including \"[WARN] Test warning message\", found:\n```\n{}\n```\n",
result
);
assert!(
result.contains("[ERROR] Test error message"),
"expected result to not include \"[ERROR] Test error message\", found:\n```\n{}\n```\n",
result
);
}
} // ensure logger is dropped before temp dir
temp_log_dir
.close()
.expect("Failed to clean up temporary directory");
}
#[test]
fn test_custom_line_separators() {
// Create a temporary directory to put a log file into for testing
let temp_log_dir = tempfile::tempdir().expect("Failed to set up temporary directory");
let log_file = temp_log_dir.path().join("test_custom_line_sep.log");
{
// Create a basic logger configuration
let (_max_level, logger) = fern::Dispatch::new()
// default format is just the message if not specified
// default log level is 'trace' if not specified (logs all messages)
// output to the log file with the "\r\n" line separator.
.chain(fern::Output::reopen1(
fern::log_reopen1(&log_file, None).expect("Failed to open log file"),
"\r\n",
))
.into_log();
let l = &*logger;
manual_log(l, Info, "message1");
manual_log(l, Info, "message2");
// ensure all File objects are dropped and OS buffers are flushed.
logger.flush();
{
let result = {
let mut log_read =
fs::File::open(temp_log_dir.path().join("test_custom_line_sep.log")).unwrap();
let mut buf = String::new();
log_read.read_to_string(&mut buf).unwrap();
buf
};
assert_eq!(&result, "message1\r\nmessage2\r\n");
}
} // ensure logger is dropped before temp dir
temp_log_dir
.close()
.expect("Failed to clean up temporary directory");
}