<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Caleb Okpara</title>
    <description>The latest articles on DEV Community by Caleb Okpara (@drantaz).</description>
    <link>https://dev.to/drantaz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1107560%2Fa31635ad-f1da-4347-a9c8-7f5fd1852e2f.png</url>
      <title>DEV Community: Caleb Okpara</title>
      <link>https://dev.to/drantaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/drantaz"/>
    <language>en</language>
    <item>
      <title>How Modem Pay is Leading the Fintech Charge in Gambia</title>
      <dc:creator>Caleb Okpara</dc:creator>
      <pubDate>Thu, 29 May 2025 07:47:03 +0000</pubDate>
      <link>https://dev.to/drantaz/how-modem-pay-is-leading-the-fintech-charge-in-gambia-1fp3</link>
      <guid>https://dev.to/drantaz/how-modem-pay-is-leading-the-fintech-charge-in-gambia-1fp3</guid>
      <description>&lt;p&gt;As digital transactions become the global standard, Gambia's financial ecosystem is striving to keep pace. For years, businesses, developers, and everyday users in the region have faced challenges with outdated payment systems, inconsistent infrastructure, and a scarcity of reliable digital tools.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Modem Pay&lt;/strong&gt;, Gambia’s homegrown fintech platform, purpose-built to simplify, secure, and supercharge how payments are made and received.&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 What Exactly Is Modem Pay?
&lt;/h3&gt;

&lt;p&gt;Modem Pay is a &lt;strong&gt;flexible and developer-friendly payment platform&lt;/strong&gt; that empowers businesses of all sizes to accept payments via mobile money wallets, bank accounts, and other digital channels. It’s more than just a payment gateway, it’s a complete infrastructure for managing money in a modern, digital-first way.&lt;/p&gt;




&lt;h3&gt;
  
  
  🚀 What Problems Does Modem Pay Solve?
&lt;/h3&gt;

&lt;p&gt;For too long, accepting payments in Gambia has involved manual processes, delayed transfers, or systems that aren’t built for the local context. Modem Pay was created to fix all of that.&lt;/p&gt;

&lt;p&gt;Here’s how:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accept Payments Digitally&lt;/strong&gt;: Receive money through QMoney, AfriMoney, Wave, and other methods, fast and reliably.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Send Money Anywhere&lt;/strong&gt;: Transfer funds to bank accounts, mobile wallets, or even between Modem Pay merchants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer-Ready APIs&lt;/strong&gt;: Simple and powerful APIs for developers looking to build seamless integrations and custom automations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Support for Every Business&lt;/strong&gt;: Whether you’re a school, e-commerce brand, freelancer, or betting company, Modem Pay adapts to your needs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧩 Built for Developers, Loved by Businesses
&lt;/h3&gt;

&lt;p&gt;One of Modem Pay’s core strengths is how &lt;strong&gt;developer-friendly&lt;/strong&gt; it is. From well-documented APIs to SDKs, CLI tools, and webhook support, developers can build with confidence, and businesses benefit from smooth, reliable performance.&lt;/p&gt;

&lt;p&gt;Plus, non-technical users aren’t left out. With &lt;strong&gt;features like Payment Links&lt;/strong&gt;, even vendors with no websites or code experience can start accepting money instantly.&lt;/p&gt;




&lt;h3&gt;
  
  
  🌍 Why Modem Pay Matters to Gambia
&lt;/h3&gt;

&lt;p&gt;Modem Pay isn’t a foreign import retrofitted to the African market. It’s &lt;strong&gt;built in Gambia&lt;/strong&gt;, for Gambia, with a deep understanding of local financial behaviors, mobile money ecosystems, and real business challenges.&lt;/p&gt;

&lt;p&gt;We believe local businesses deserve tools as good as, if not better than, what’s available globally.&lt;/p&gt;

&lt;p&gt;By enabling fast, secure, and cashless transactions, Modem Pay is helping push Gambia’s economy forward, one transaction at a time.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Ready to Get Started?
&lt;/h3&gt;

&lt;p&gt;You can sign up today in minutes, no complicated forms, no expensive setup.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://merchant.modempay.com/auth/register" rel="noopener noreferrer"&gt;Sign up here&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🔧 &lt;a href="https://docs.modempay.com" rel="noopener noreferrer"&gt;View our developer documentation&lt;/a&gt;&lt;br&gt;&lt;br&gt;
📞 &lt;a href="//mailto:info@modempay.com"&gt;Contact our team&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Modem Pay isn’t just a product, it’s a movement toward &lt;strong&gt;a cashless, empowered, and digitally-connected Gambia&lt;/strong&gt;. Whether you're a tech startup, merchant, school, or developer, there's a place for you here.&lt;/p&gt;

&lt;p&gt;Join the future of payments in West Africa.&lt;/p&gt;

</description>
      <category>modempay</category>
      <category>fintech</category>
      <category>gambia</category>
      <category>digitalpayments</category>
    </item>
    <item>
      <title>Top 10 Developer-First Payment Processors in West Africa</title>
      <dc:creator>Caleb Okpara</dc:creator>
      <pubDate>Sat, 01 Feb 2025 14:51:50 +0000</pubDate>
      <link>https://dev.to/drantaz/top-10-developer-first-payment-processors-in-west-africa-1828</link>
      <guid>https://dev.to/drantaz/top-10-developer-first-payment-processors-in-west-africa-1828</guid>
      <description>&lt;p&gt;Building a payment system in West Africa isn’t easy. Developers need APIs that are well-documented, reliable, and easy to integrate. Whether you’re creating an e-commerce store, a SaaS platform, or a mobile app, choosing the right payment processor can make or break your user experience.  &lt;/p&gt;

&lt;p&gt;Here are ten payment processors that prioritize developers in West Africa, with a focus on API flexibility, sandbox environments, and clear documentation.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Paystack&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://paystack.com" rel="noopener noreferrer"&gt;Paystack&lt;/a&gt; is one of the most developer-friendly payment platforms in Africa, with a clean API and great documentation. It supports various payment methods, including cards, mobile money, and bank transfers. The sandbox mode is easy to test, and their webhook system is well-structured, making it simple to handle real-time transaction updates.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Flutterwave&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.flutterwave.com" rel="noopener noreferrer"&gt;Flutterwave&lt;/a&gt; provides a powerful API that supports multiple payment options, including local and international cards, mobile wallets, and bank transfers. The platform is widely used across West Africa and comes with features like hosted checkout pages and no-code payment links. Developers appreciate the ease of setting up recurring payments and seamless integrations with platforms like Shopify.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Squad by GTCO&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.squadco.com" rel="noopener noreferrer"&gt;Squad&lt;/a&gt; is Guaranty Trust Bank’s answer to digital payments. It offers APIs for collecting payments via cards, bank transfers, and mobile money. The platform is designed with developers in mind and provides a fast way to integrate payments into websites and mobile apps, especially for businesses that want to settle funds directly into GTBank accounts.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. DPO Group&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dpogroup.com" rel="noopener noreferrer"&gt;DPO Group&lt;/a&gt; is widely used across Africa and offers a flexible API that supports multiple currencies and payment methods. While it’s not as popular as Paystack or Flutterwave, it’s a strong choice for businesses looking for a reliable international payment processor with regional coverage.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Korapay&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://korahq.com" rel="noopener noreferrer"&gt;Korapay&lt;/a&gt; is another solid choice with a developer-first approach. The API is well-documented and supports bank transfers and card payments. The onboarding process is straightforward, and the platform is gaining traction among fintech startups in Nigeria and beyond.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Modem Pay&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://modempay.com" rel="noopener noreferrer"&gt;Modem Pay&lt;/a&gt; is designed to give businesses and developers an easy way to accept payments across West Africa. It supports multiple payment methods, including cards, bank transfers, and mobile money, and offers a flexible API with a well-structured webhook system. Like Paystack, it provides payment links, a developer sandbox, and seamless integration options for both web and mobile apps. What sets it apart is its simplified onboarding process, allowing businesses to start accepting payments with minimal friction. It’s a strong alternative for those looking for a powerful but accessible payment solution.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. FedaPay&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://fedapay.com" rel="noopener noreferrer"&gt;FedaPay&lt;/a&gt; is a Benin-based payment processor with a strong focus on Francophone Africa. The API supports card payments and mobile money and is well-documented, making it a good option for developers working in French-speaking West African countries.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;8. VoguePay&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://voguepay.com" rel="noopener noreferrer"&gt;VoguePay&lt;/a&gt; has been around for a while and is known for supporting international transactions. The API is flexible and allows businesses to collect payments from customers globally, making it a good choice for companies that need cross-border payment solutions.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;9. Monnify&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://monnify.com" rel="noopener noreferrer"&gt;Monnify&lt;/a&gt; is a Nigerian payment processor focused on bank transfers. It provides an API that enables businesses to generate unique virtual account numbers for customers, making payments seamless for users who prefer bank transfers over cards.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;10. Ozow&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ozow.com" rel="noopener noreferrer"&gt;Ozow&lt;/a&gt; is a rising payment platform that offers instant bank transfers and card payments. Its API is built for developers who want a straightforward solution for processing transactions across multiple channels.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re a developer looking for a payment processor in West Africa, the best choice depends on your specific needs. If you need broad coverage and advanced features, Paystack and Flutterwave are the go-to options. If you want something equally powerful but easier to onboard and integrate, &lt;strong&gt;Modem Pay&lt;/strong&gt; is a strong contender. For businesses focusing on bank transfers, &lt;strong&gt;Monnify&lt;/strong&gt; and &lt;strong&gt;Squad&lt;/strong&gt; offer great solutions. No matter which you choose, having a solid API and clear documentation will make your integration process much smoother.  &lt;/p&gt;

</description>
      <category>fintechafrica</category>
      <category>paymentprocessing</category>
      <category>modempay</category>
      <category>developertools</category>
    </item>
    <item>
      <title>Enhancing LLM Observability with Murnitur: A Comprehensive Guide</title>
      <dc:creator>Caleb Okpara</dc:creator>
      <pubDate>Mon, 24 Jun 2024 13:47:21 +0000</pubDate>
      <link>https://dev.to/drantaz/enhancing-llm-observability-with-murnitur-a-comprehensive-guide-g9l</link>
      <guid>https://dev.to/drantaz/enhancing-llm-observability-with-murnitur-a-comprehensive-guide-g9l</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As adopting large language models (LLMs) accelerates across industries, ensuring optimal performance and reliability has become paramount. Observability in LLMs is essential for maintaining these models' quality, efficiency, and security. This guide explores the concept of LLM observability, its importance, and how Murnitur.ai leverages advanced observability techniques to enhance LLM operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is LLM Observability?
&lt;/h2&gt;

&lt;p&gt;LLM observability is the practice of monitoring and understanding the performance, behavior, and outputs of large language models. It involves tracking metrics, detecting anomalies, and diagnosing issues in LLM-based applications. Key components include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Output Evaluation&lt;/strong&gt;: Regularly assessing the accuracy and reliability of model outputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Analysis&lt;/strong&gt;: Evaluating the quality of prompts to ensure they produce desired results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval Improvement&lt;/strong&gt;: Enhancing data search and retrieval processes to improve output quality.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Effective LLM observability allows teams to pinpoint issues such as hallucinations, performance degradation, and security vulnerabilities, ensuring that the models function correctly and efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Challenges in LLM Applications
&lt;/h2&gt;

&lt;p&gt;LLMs face several challenges that observability can help address:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hallucinations&lt;/strong&gt;: LLMs may generate inaccurate or false information, which can mislead users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance and Cost&lt;/strong&gt;: Dependence on third-party models can lead to performance inconsistencies and high operational costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Hacking&lt;/strong&gt;: Users can manipulate prompts to produce specific, potentially harmful content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security and Data Privacy&lt;/strong&gt;: LLMs can inadvertently expose sensitive data, necessitating robust security measures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Variance&lt;/strong&gt;: Responses can vary in accuracy and relevance, impacting user experience.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Role of Murnitur in LLM Observability
&lt;/h2&gt;

&lt;p&gt;Murnitur.ai specializes in enhancing the observability of LLMs through its innovative platform. Here's how Murnitur addresses key aspects of LLM observability:&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-Time Monitoring and Evaluation
&lt;/h3&gt;

&lt;p&gt;Murnitur provides comprehensive tools for real-time monitoring of LLM applications. This includes tracking performance metrics such as latency, throughput, and response quality. By continuously evaluating these metrics, Murnitur enables quick identification and resolution of performance issues, ensuring optimal model functioning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhanced Explainability
&lt;/h3&gt;

&lt;p&gt;Murnitur enhances the transparency of LLM operations by providing deep insights into model behavior. Visualization tools help stakeholders understand request-response pairs, word embeddings, and prompt chains, thereby improving the interpretability and trustworthiness of LLM applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Proactive Issue Diagnosis
&lt;/h3&gt;

&lt;p&gt;With end-to-end visibility into LLM operations, Murnitur allows for efficient diagnosis of issues. Engineers can trace the specific components of the application stack contributing to problems, whether they lie in the GPU, database, or the model itself. This holistic approach accelerates troubleshooting and minimizes downtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security and Compliance
&lt;/h3&gt;

&lt;p&gt;Murnitur's observability solutions include robust security features that monitor model behaviors for potential vulnerabilities. This continuous surveillance helps detect anomalies and prevent data leaks or adversarial attacks, safeguarding sensitive information and maintaining compliance with data privacy regulations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cost Management
&lt;/h3&gt;

&lt;p&gt;By observing resource consumption and utilization patterns, Murnitur helps organizations optimize their LLM operations for cost-effectiveness. Monitoring metrics such as token consumption, CPU/GPU usage, and memory utilization allow for informed decisions on scaling resources, thereby reducing unnecessary expenses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;LLM observability is crucial for maintaining the performance, reliability, and security of large language models. Murnitur.ai provides a comprehensive observability solution that addresses common challenges faced by LLM applications. Through real-time monitoring, enhanced explainability, proactive issue diagnosis, and robust security measures, Murnitur ensures that LLMs operate at their best, delivering accurate and reliable results.&lt;/p&gt;

&lt;p&gt;For more information on how Murnitur can enhance your LLM observability, visit &lt;a href="https://murnitur.ai" rel="noopener noreferrer"&gt;Murnitur.ai&lt;/a&gt; and explore their detailed documentation at &lt;a href="https://docs.murnitur.ai" rel="noopener noreferrer"&gt;docs.murnitur.ai&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>llmobservability</category>
      <category>murnitur</category>
      <category>aiexplainability</category>
      <category>aisecurity</category>
    </item>
    <item>
      <title>Launched AIOps Startup</title>
      <dc:creator>Caleb Okpara</dc:creator>
      <pubDate>Mon, 10 Jun 2024 11:53:17 +0000</pubDate>
      <link>https://dev.to/drantaz/launched-aiops-startup-2j87</link>
      <guid>https://dev.to/drantaz/launched-aiops-startup-2j87</guid>
      <description>&lt;p&gt;We are thrilled to announce the launch of our AI observability platform, Murnitur. This platform offers a simple SDK for seamless integration, along with features for LLM tracing, evaluation, and guardrails to ensure optimal performance. Additionally, we provide a playground for testing and experimenting with your AI models. We would greatly appreciate it if you could take a moment to check it out or share it with anyone who might find it useful. Your support means a lot to us. Thank you!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://murnitur.ai" rel="noopener noreferrer"&gt;murnitur.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🙏🏾🙏🏾&lt;/p&gt;

</description>
      <category>llm</category>
      <category>observability</category>
      <category>murnitur</category>
      <category>rag</category>
    </item>
    <item>
      <title>Exploring ChronoSocketHub: A Comprehensive Real-time Communication and Job Scheduling Solution for Node.js</title>
      <dc:creator>Caleb Okpara</dc:creator>
      <pubDate>Wed, 06 Dec 2023 19:04:01 +0000</pubDate>
      <link>https://dev.to/drantaz/exploring-chronosockethub-a-comprehensive-real-time-communication-and-job-scheduling-solution-for-nodejs-4fa0</link>
      <guid>https://dev.to/drantaz/exploring-chronosockethub-a-comprehensive-real-time-communication-and-job-scheduling-solution-for-nodejs-4fa0</guid>
      <description>&lt;p&gt;As technology rapidly evolves, the demand for efficient, scalable, and real-time applications continues to grow. Node.js, with its event-driven architecture, has become a cornerstone for building such applications. &lt;strong&gt;ChronoSocketHub&lt;/strong&gt; emerges as a versatile and powerful toolset that seamlessly integrates Socket.io with Agenda and BullMQ, offering developers an all-encompassing solution for real-time communication and job scheduling within their Node.js applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding ChronoSocketHub
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is ChronoSocketHub?
&lt;/h3&gt;

&lt;p&gt;ChronoSocketHub acts as a unifying force, bringing together Socket.io, a popular library for real-time web applications, with the robust capabilities of Agenda for job scheduling and BullMQ for message queue management. This amalgamation streamlines the orchestration of Socket.io events while harnessing the potential of Agenda and BullMQ, providing developers with a consolidated ecosystem to build feature-rich, real-time applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Getting started with ChronoSocketHub is effortless. By using npm, developers can quickly install the package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;chrono-socket-hub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setting Up a ChronoSocket Instance
&lt;/h3&gt;

&lt;p&gt;Let's dive into the core functionalities of ChronoSocketHub by initializing a ChronoSocket instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChronoSocket&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chrono-socket-hub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chronoSocket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChronoSocket&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this simple initialization, developers gain access to a wide array of features and functionalities that pave the way for seamless real-time communication and job scheduling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrating with Node.js and Express
&lt;/h3&gt;

&lt;p&gt;ChronoSocketHub goes beyond basic Node.js integration. For those using Express, the integration process remains straightforward. Here's an example of integrating ChronoSocketHub with an Express application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChronoSocket&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chrono-socket-hub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chronoSocket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChronoSocket&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By incorporating ChronoSocketHub within an Express application, developers leverage a unified environment that harnesses the power of real-time communication and job scheduling seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leveraging ChronoSocketHub's Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Real-time Communication
&lt;/h3&gt;

&lt;p&gt;ChronoSocketHub simplifies real-time communication through Socket.io integration, allowing developers to manage WebSocket connections effortlessly. Listening to client connections and messages becomes a breeze:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;chronoSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onMessage&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Received message from &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Job Scheduling with Agenda and BullMQ
&lt;/h3&gt;

&lt;p&gt;The power of ChronoSocketHub extends to job scheduling, offering flexibility through Agenda and BullMQ agents:&lt;/p&gt;

&lt;h4&gt;
  
  
  Using Agenda for Job Scheduling
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chronoAgenda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChronoSocket&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agenda&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mongodb://localhost:27017/myDB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;chronoAgenda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scheduleTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-task&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;in 10 seconds&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;schedule&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Perform actions for the scheduled task&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Employing BullMQ for Job Scheduling
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chronoBullMQ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChronoSocket&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bullmq&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;localhost:6379&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;redisPassword&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;chronoBullMQ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scheduleTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-job&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;30 seconds&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;interval&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Task execution logic here&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By utilizing Agenda or BullMQ as agents, developers can effortlessly manage scheduled tasks and automate crucial processes within their applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring ChronoSocketHub
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Customization through Configuration
&lt;/h3&gt;

&lt;p&gt;ChronoSocketHub offers an array of configuration options, enabling developers to tailor the behavior of the library according to their application's requirements. Here's an overview of available configuration options:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Default Value&lt;/th&gt;
&lt;th&gt;Data Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines the job scheduling agent for &lt;code&gt;ChronoSocketHub&lt;/code&gt; (&lt;code&gt;agenda&lt;/code&gt; or &lt;code&gt;bullmq&lt;/code&gt;).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;agenda&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"agenda" or "bullmq"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;db&lt;/td&gt;
&lt;td&gt;Specifies the database for Agenda or BullMQ.&lt;/td&gt;
&lt;td&gt;undefined&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;redisPassword&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specifies the password for your redis connection.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowBullMQRejuvenation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specifies whether you want to rejuvenate jobs on server restart.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;socketPath&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specifies the path for the socket connection.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/ws/chrono&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Developers can fine-tune these settings to suit their application's specific needs, ensuring a tailored and optimized environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ChronoSocketHub&lt;/strong&gt; emerges as a robust solution, unifying real-time communication and job scheduling within Node.js applications. By leveraging the capabilities of Socket.io, Agenda, and BullMQ, developers gain access to a comprehensive toolkit for building responsive, scalable, and time-sensitive applications.&lt;/p&gt;

&lt;p&gt;Whether it's facilitating seamless real-time communication or orchestrating complex job scheduling, ChronoSocketHub stands as a versatile ally for developers seeking to create cutting-edge Node.js applications.&lt;/p&gt;




&lt;h3&gt;
  
  
  Open Source and Community
&lt;/h3&gt;

&lt;p&gt;An essential aspect of ChronoSocketHub is its commitment to being open source. The package encourages community contributions, ensuring continuous improvement and innovation within the ecosystem.&lt;/p&gt;

&lt;p&gt;Developers are encouraged to explore, contribute, and participate in shaping the future of ChronoSocketHub by visiting the &lt;a href="https://github.com/cheese-framework/chrono-socket-hub" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; and engaging with the community.&lt;/p&gt;




&lt;p&gt;ChronoSocketHub opens doors to a realm of possibilities, transforming the way developers handle real-time communication and job scheduling. Explore its capabilities, customize it to your needs, and join the vibrant community harnessing the power of ChronoSocketHub.&lt;/p&gt;

&lt;p&gt;Thank you for joining us on this journey through ChronoSocketHub. Happy coding!&lt;/p&gt;

</description>
      <category>socket</category>
      <category>bullmq</category>
      <category>agenda</category>
      <category>cron</category>
    </item>
    <item>
      <title>📣 Exciting Update for @drantaz/f-log! 🚀</title>
      <dc:creator>Caleb Okpara</dc:creator>
      <pubDate>Mon, 26 Jun 2023 10:54:18 +0000</pubDate>
      <link>https://dev.to/drantaz/exciting-update-for-drantazf-log-2ch6</link>
      <guid>https://dev.to/drantaz/exciting-update-for-drantazf-log-2ch6</guid>
      <description>&lt;p&gt;Since my last post, I'm thrilled to share that &lt;a class="mentioned-user" href="https://dev.to/drantaz"&gt;@drantaz&lt;/a&gt;/f-log has reached an incredible milestone of 850+ downloads! 🎉 But that's not all — I've been hard at work adding new features and enhancements to make logging even more powerful and customizable. Let me give you a quick rundown:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Override Default Configurations&lt;/strong&gt;: Now you have the flexibility to override the default configurations of &lt;a class="mentioned-user" href="https://dev.to/drantaz"&gt;@drantaz&lt;/a&gt;/f-log. Customize where you want to save your logs, change the filename, and even modify the log file extension. It's all in your hands!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Enhanced Status Logs&lt;/strong&gt;: With the latest version, you can now define your own status log themes. Personalize the colors and formatting to match your preferences. Plus, I've introduced new statuses like "verbose," "http," "debug," and "silly" for even more granular logging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Flexible Log Formats&lt;/strong&gt;: Choose the format that suits you best. Whether you prefer JSON or plain text, &lt;a class="mentioned-user" href="https://dev.to/drantaz"&gt;@drantaz&lt;/a&gt;/f-log lets you specify how your logs should be saved. It's all about providing the options you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Turn Off Console Logs&lt;/strong&gt;: Want to keep your logs solely in the file? No problem! Now you can easily disable console logs and focus solely on capturing and managing your logs in the designated file.&lt;/p&gt;

&lt;p&gt;I'm incredibly proud of the progress we've made, and I'm grateful to the amazing community that has supported and contributed to &lt;a class="mentioned-user" href="https://dev.to/drantaz"&gt;@drantaz&lt;/a&gt;/f-log's growth. 🙌&lt;/p&gt;

&lt;p&gt;If you haven't checked it out yet, give it a try and see how &lt;a class="mentioned-user" href="https://dev.to/drantaz"&gt;@drantaz&lt;/a&gt;/f-log simplifies file logging in your Node.js applications. Let's level up your debugging and monitoring game!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/@drantaz/f-log" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@drantaz/f-log&lt;/a&gt;&lt;/p&gt;

</description>
      <category>development</category>
      <category>node</category>
      <category>debugging</category>
      <category>logging</category>
    </item>
    <item>
      <title>Simplify File Logging in Node.js with F-Log</title>
      <dc:creator>Caleb Okpara</dc:creator>
      <pubDate>Sat, 24 Jun 2023 12:35:21 +0000</pubDate>
      <link>https://dev.to/drantaz/simplify-file-logging-in-nodejs-with-f-log-563j</link>
      <guid>https://dev.to/drantaz/simplify-file-logging-in-nodejs-with-f-log-563j</guid>
      <description>&lt;p&gt;Introduction:&lt;br&gt;
Logging is an essential aspect of any application, allowing developers to track events, errors, and important information. To simplify file logging in Node.js, I've created F-Log, a versatile npm package. With F-Log, you can effortlessly incorporate robust logging capabilities into your projects, making debugging and troubleshooting a breeze.&lt;/p&gt;

&lt;p&gt;Installation:&lt;br&gt;
To get started with F-Log, simply install the package using npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i @drantaz/f-log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usage:&lt;br&gt;
Once installed, you can use F-Log to create logs with ease. Here are a few examples of how you can use the package:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating a Single Log:
To create a single log, use the &lt;code&gt;log&lt;/code&gt; function:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@drantaz/f-log&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;info&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// This will print 'Hello World' to the console &lt;/span&gt;
&lt;span class="c1"&gt;// in a blue color and save it to a file named &lt;/span&gt;
&lt;span class="c1"&gt;// 'logs.log'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The third parameter of the &lt;code&gt;log&lt;/code&gt; function is optional and can be used to specify whether to persist the log to the file. Setting it to &lt;code&gt;false&lt;/code&gt; will prevent the log from being saved.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Logging Multiple Texts:
If you need to log multiple texts at once, you can use the &lt;code&gt;logAll&lt;/code&gt; function:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;logAll&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@drantaz/f-log&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;logAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;info&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Log 1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Log 2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Log 3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="c1"&gt;// This will log each text and save them in &lt;/span&gt;
&lt;span class="c1"&gt;// the 'logs.log' file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Similar to the &lt;code&gt;log&lt;/code&gt; function, the second parameter of &lt;code&gt;logAll&lt;/code&gt; can be used to control whether the logs should be persisted to the file.&lt;/p&gt;

&lt;p&gt;Reading Logs:&lt;br&gt;
To retrieve your logs, you can use the &lt;code&gt;getLogs&lt;/code&gt; function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getLogs&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@drantaz/f-log&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Get all logs without grouping&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLogs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Get all logs with grouping&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLogs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Get logs by title without grouping&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLogs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;info&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Get logs by title with grouping&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getLogs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;info&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, the logs are returned as an array. You can customize the output by specifying the grouping parameter and filtering logs by title.&lt;/p&gt;

&lt;p&gt;Configuration:&lt;br&gt;
To customize the configuration of F-Log, you can create a file called &lt;code&gt;f-log.json&lt;/code&gt; at the root of your project. Here's an example of how you can override the log file path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./src/logs"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Future Releases:&lt;br&gt;
I am actively working on adding more configuration options and enhancements to F-Log. Stay tuned for future releases to unlock even more functionality.&lt;/p&gt;

&lt;p&gt;Log Types:&lt;br&gt;
F-Log supports various log types, each represented by a specific color:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;info&lt;/td&gt;
&lt;td&gt;blue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;success&lt;/td&gt;
&lt;td&gt;green&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;warn&lt;/td&gt;
&lt;td&gt;orange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;error&lt;/td&gt;
&lt;td&gt;red&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;critical&lt;/td&gt;
&lt;td&gt;darkred&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Conclusion:&lt;br&gt;
With F-Log, you can simplify file logging in your Node.js applications. By easily incorporating robust logging capabilities, you can streamline debugging and gain valuable insights into the behavior of your application. Give F-Log a try and take your logging to the next level!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/@drantaz/f-log" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@drantaz/f-log&lt;/a&gt;&lt;/p&gt;




</description>
      <category>node</category>
      <category>logging</category>
      <category>debugging</category>
      <category>npmpackage</category>
    </item>
  </channel>
</rss>
