From 108f94f2a2e2b4dbb15778c9d68db1d8bd0a63f9 Mon Sep 17 00:00:00 2001 From: Yoshua Wuyts Date: Mon, 6 Aug 2018 12:30:32 +0200 Subject: [PATCH] . --- .github/CODE_OF_CONDUCT.md | 75 ++++++++++++ .github/CONTRIBUTING.md | 63 ++++++++++ .github/ISSUE_TEMPLATE.md | 41 +++++++ .github/PULL_REQUEST_TEMPLATE.md | 21 ++++ .github/stale.yml | 17 +++ .gitignore | 7 ++ .travis.yml | 13 +++ CERTIFICATE | 37 ++++++ Cargo.toml | 19 ++++ LICENSE-APACHE | 190 +++++++++++++++++++++++++++++++ LICENSE-MIT | 21 ++++ README.md | 53 +++++++++ examples/main.rs | 24 ++++ rustfmt.toml | 2 + src/lib.rs | 57 ++++++++++ tests/test.rs | 0 16 files changed, 640 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/stale.yml create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 CERTIFICATE create mode 100644 Cargo.toml create mode 100644 LICENSE-APACHE create mode 100644 LICENSE-MIT create mode 100644 README.md create mode 100644 examples/main.rs create mode 100644 rustfmt.toml create mode 100644 src/lib.rs create mode 100644 tests/test.rs diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..d02f050 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,75 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of +experience, +education, socio-economic status, nationality, personal appearance, race, +religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or +advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic +address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a +professional setting + + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at yoshuawuyts@gmail.com, or through +IRC. All complaints will be reviewed and investigated and will result in a +response that is deemed necessary and appropriate to the circumstances. The +project team is obligated to maintain confidentiality with regard to the +reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, +available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..96806b5 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,63 @@ +# Contributing +Contributions include code, documentation, answering user questions, running the +project's infrastructure, and advocating for all types of users. + +The project welcomes all contributions from anyone willing to work in good faith +with other contributors and the community. No contribution is too small and all +contributions are valued. + +This guide explains the process for contributing to the project's GitHub +Repository. + +- [Code of Conduct](#code-of-conduct) +- [Bad Actors](#bad-actors) +- [Developer Certificate of Origin](#developer-certificate-of-origin) + +## Code of Conduct +The project has a [Code of Conduct][./CODE_OF_CONDUCT.md] that *all* +contributors are expected to follow. This code describes the *minimum* behavior +expectations for all contributors. + +As a contributor, how you choose to act and interact towards your +fellow contributors, as well as to the community, will reflect back not only +on yourself but on the project as a whole. The Code of Conduct is designed and +intended, above all else, to help establish a culture within the project that +allows anyone and everyone who wants to contribute to feel safe doing so. + +Should any individual act in any way that is considered in violation of the +[Code of Conduct][./CODE_OF_CONDUCT.md], corrective actions will be taken. It is +possible, however, for any individual to *act* in such a manner that is not in +violation of the strict letter of the Code of Conduct guidelines while still +going completely against the spirit of what that Code is intended to accomplish. + +Open, diverse, and inclusive communities live and die on the basis of trust. +Contributors can disagree with one another so long as they trust that those +disagreements are in good faith and everyone is working towards a common +goal. + +## Bad Actors +All contributors to tacitly agree to abide by both the letter and +spirit of the [Code of Conduct][./CODE_OF_CONDUCT.md]. Failure, or +unwillingness, to do so will result in contributions being respectfully +declined. + +A *bad actor* is someone who repeatedly violates the *spirit* of the Code of +Conduct through consistent failure to self-regulate the way in which they +interact with other contributors in the project. In doing so, bad actors +alienate other contributors, discourage collaboration, and generally reflect +poorly on the project as a whole. + +Being a bad actor may be intentional or unintentional. Typically, unintentional +bad behavior can be easily corrected by being quick to apologize and correct +course *even if you are not entirely convinced you need to*. Giving other +contributors the benefit of the doubt and having a sincere willingness to admit +that you *might* be wrong is critical for any successful open collaboration. + +Don't be a bad actor. + +## Developer Certificate of Origin +All contributors must read and agree to the [Developer Certificate of +Origin (DCO)](../CERTIFICATE). + +The DCO allows us to accept contributions from people to the project, similarly +to how a license allows us to distribute our code. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..5f42a30 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,41 @@ + + +**Choose one:** is this a 🐛 bug report, a 🙋 feature request, or a 🔦 question? + + + +## Expected Behavior + + + + +## Current Behavior + + + + +## Possible Solution + + + +## Context + + + +## Code Sample + + +## Your Environment + + +| Software | Version(s) | +| ---------------- | ---------- | +| Package | +| Runtime | +| Package Manager | +| Operating System | diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..d820588 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,21 @@ + + +**Choose one:** is this a 🐛 bug fix, a 🙋 feature, or a 🔦 documentation change? + + + +## Checklist + +- [ ] tests pass +- [ ] tests and/or benchmarks are included +- [ ] documentation is changed or added + +## Context + + +## Semver Changes + diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..b8550d0 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,17 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +daysUntilStale: 90 +daysUntilClose: 7 +exemptLabels: + - pinned + - security +exemptProjects: false +exemptMilestones: false +staleLabel: wontfix +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +unmarkComment: false +closeComment: false +limitPerRun: 30 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ac0d3c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +coverage/ +target/ +tmp/ +dist/ +npm-debug.log* +Cargo.lock +.DS_Store diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..56d82a9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,13 @@ +language: rust +rust: + - nightly + +before_script: | + rustup component add rustfmt-preview && + cargo install clippy -f +script: | + cargo fmt -- --check && + cargo clippy -- -D clippy && + cargo build --verbose && + cargo test --verbose +cache: cargo diff --git a/CERTIFICATE b/CERTIFICATE new file mode 100644 index 0000000..8201f99 --- /dev/null +++ b/CERTIFICATE @@ -0,0 +1,37 @@ +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +1 Letterman Drive +Suite D4700 +San Francisco, CA, 94129 + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..c906457 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "clap-log-flag" +version = "0.1.0" +license = "MIT OR Apache-2.0" +repository = "https://github.com/rust-clique/clap-log-flag" +documentation = "https://docs.rs/clap-log-flag" +description = "Add a logger to CLIs using structopt" +authors = ["Yoshua Wuyts "] +readme = "README.md" + +[dependencies] +structopt = "0.2.10" +env_logger = "0.5.12" +failure = "0.1.2" +log = "0.4.3" +pretty_env_logger = "0.2.4" + +[dev-dependencies] +clap-verbosity-flag = "0.2.0" diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 0000000..6ab0696 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2018 Yoshua Wuyts + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 0000000..c7509ba --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Yoshua Wuyts + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a59977c --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# clap-log-flag +[![crates.io version][1]][2] [![build status][3]][4] +[![downloads][5]][6] [![docs.rs docs][7]][8] + +Add a logger to CLIs using structopt. + +- [Documentation][8] +- [Crates.io][2] + +## Usage +```rust +extern crate clap_log_flag; +#[macro_use] +extern crate log; +extern crate clap_verbosity_flag; +#[macro_use] +extern crate structopt; + +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +struct Cli { + #[structopt(flatten)] + verbose: clap_verbosity_flag::Verbosity, + #[structopt(flatten)] + log: clap_log_flag::Log, +} + +fn main() -> Result<(), Box> { + let args = Cli::from_args(); + args.log.log_all(args.verbose.log_level())?; + info!("hello"); + error!("oh no!"); + Ok(()) +} +``` + +## Installation +```sh +$ cargo add clap-log-flag +``` + +## License +[MIT](./LICENSE-MIT) OR [Apache-2.0](./LICENSE-APACHE) + +[1]: https://img.shields.io/crates/v/clap-log-flag.svg?style=flat-square +[2]: https://crates.io/crates/clap-log-flag +[3]: https://img.shields.io/travis/rust-clique/clap-log-flag.svg?style=flat-square +[4]: https://travis-ci.org/rust-clique/clap-log-flag +[5]: https://img.shields.io/crates/d/clap-log-flag.svg?style=flat-square +[6]: https://crates.io/crates/clap-log-flag +[7]: https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square +[8]: https://docs.rs/clap-log-flag diff --git a/examples/main.rs b/examples/main.rs new file mode 100644 index 0000000..989a109 --- /dev/null +++ b/examples/main.rs @@ -0,0 +1,24 @@ +extern crate clap_log_flag; +#[macro_use] +extern crate log; +extern crate clap_verbosity_flag; +#[macro_use] +extern crate structopt; + +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +struct Cli { + #[structopt(flatten)] + verbose: clap_verbosity_flag::Verbosity, + #[structopt(flatten)] + log: clap_log_flag::Log, +} + +fn main() -> Result<(), Box> { + let args = Cli::from_args(); + args.log.log_all(args.verbose.log_level())?; + info!("hello"); + error!("oh no!"); + Ok(()) +} diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..4c1eefa --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,2 @@ +max_width = 80 +tab_spaces = 2 diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..0b7b432 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,57 @@ +#![cfg_attr(feature = "nightly", deny(missing_docs))] +#![cfg_attr(feature = "nightly", feature(external_doc))] +#![cfg_attr(feature = "nightly", doc(include = "../README.md"))] +#![cfg_attr(test, deny(warnings))] + +extern crate env_logger; +extern crate failure; +extern crate log; +extern crate pretty_env_logger; +#[macro_use] +extern crate structopt; + +use env_logger::Builder as LoggerBuilder; +use failure::Error; +use log::Level; +use pretty_env_logger::formatted_builder; + +/// Add log functionality to Structopt. +#[derive(StructOpt, Debug)] +pub struct Log { + /// Enable pretty printing. + #[structopt(short = "P", long = "pretty")] + pretty: bool, +} + +impl Log { + /// Initialize `env_logger` and set the log level for the given package. + /// + /// All other modules default to printing warnings. + pub fn log(&self, level: Level, own_pkg_name: &str) -> Result<(), Error> { + let level_filter = level.to_level_filter(); + init_builder(self.pretty)? + .filter(Some(&own_pkg_name.replace("-", "_")), level_filter) + .filter(None, Level::Warn.to_level_filter()) + .try_init()?; + Ok(()) + } + + /// Initialize `env_logger` and set the log level for all packages. No + /// additional filtering is applied. + pub fn log_all(&self, level: Level) -> Result<(), Error> { + let level_filter = level.to_level_filter(); + + init_builder(self.pretty)? + .filter(None, level_filter) + .try_init()?; + Ok(()) + } +} + +fn init_builder(pretty: bool) -> Result { + if pretty { + Ok(formatted_builder()?) + } else { + Ok(LoggerBuilder::new()) + } +} diff --git a/tests/test.rs b/tests/test.rs new file mode 100644 index 0000000..e69de29