<?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: Prince Tegaton</title>
    <description>The latest articles on DEV Community by Prince Tegaton (@princetegaton).</description>
    <link>https://dev.to/princetegaton</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%2F430652%2F1272efd9-6f1f-466e-9703-3d9ba2d72bd7.jpeg</url>
      <title>DEV Community: Prince Tegaton</title>
      <link>https://dev.to/princetegaton</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/princetegaton"/>
    <language>en</language>
    <item>
      <title>What makes a perfect Pull Request?</title>
      <dc:creator>Prince Tegaton</dc:creator>
      <pubDate>Mon, 29 Mar 2021 17:56:04 +0000</pubDate>
      <link>https://dev.to/princetegaton/what-makes-a-perfect-pull-request-4dd2</link>
      <guid>https://dev.to/princetegaton/what-makes-a-perfect-pull-request-4dd2</guid>
      <description>&lt;p&gt;What makes the perfect pull request if one should ask?&lt;/p&gt;

&lt;p&gt;The answer to this will vary according to set standards in a team. Code review is a huge factor in ensuring quality codes are used for building a software, it also allow team members to have an insight on what the next guy is working on. Key-man risk is not a good thing to have in a software development team, frequent PR is a great way to keep everything in check.&lt;/p&gt;

&lt;p&gt;Over the years working with various teams, I have come up with my top "must-do" for a pull request.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Build-up
&lt;/h2&gt;

&lt;p&gt;Pull Requests consist of code changes (addition, modification or removal) which have been built over a short period. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Code Commit to Branch
&lt;/h3&gt;

&lt;p&gt;All pull requests starts from a &lt;em&gt;commit&lt;/em&gt; to the local branch. These commits are more important than many engineers may think. The title of commits should be descriptive enough to tell what was done/committed into branch. This ease rollback or branch-out in case of issues that require you picking your last working commit.&lt;br&gt;
PR titles like &lt;em&gt;'first change', 'second fix', 'commit before PR', 'working code'&lt;/em&gt; really do not cut it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Size of Changes
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xMTaIeSj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lwcjzw7psxqclnyknnaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xMTaIeSj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lwcjzw7psxqclnyknnaf.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Pull Request is best reviewed when the changes focus on small chunk of codes and are related. Bundling 2k line of changes across 63 files is a sure way to say &lt;em&gt;"hey dude, just approve, the code works"&lt;/em&gt;. Different scenarios may prompt this such as working on an off-the-chart feature or engineers to review may be on work leave/vacation at the time, or a poor code review culture in a team.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Descriptive Naming and Summary
&lt;/h3&gt;

&lt;p&gt;Naming is a problem for many developers (maybe only the one's I've worked with). From poor commit messages to terrible PR titles such as &lt;em&gt;'minor changes', 'fix', 'small update', 'add log', 'working code'&lt;/em&gt;. PR titles should be able to describe the purpose of code being checked in as it provide insights just like commit messages. The description of should also be filtered properly to give clear insight to the code reviewer. Below is a good sample PR naming.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Nv0zmR04--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e2yhry52o2fj8ok0liz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Nv0zmR04--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e2yhry52o2fj8ok0liz8.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The above is short and precise. It's really bad finding out the purpose of the PR after looking at the code with a title 'minor update'.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Link Related Work-items
&lt;/h3&gt;

&lt;p&gt;In platforms like Azure DevOps that support work-items for tasks, user-stories and bugs, it's best to create these items that describe the scope of work to be done. It is also a link to keep reviewers updated with what the actual logic should do. Though reviewers barely open linked items to review according to how the code is written, it is still a good practice to "keep the code with the requirement".&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Pay Attention
&lt;/h3&gt;

&lt;p&gt;Yea! Pay attention to the destination branch, especially in cases where build pipelines are setup for similar branches like DEV and MASTER. This could be a skip for code reviewers as well, you may ask &lt;em&gt;how?&lt;/em&gt;, if it's possible, then it's possible. Attention is required by the creator and reviewers of the PR to make sure codes are well scanned, the destination branch is the intended one as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Review Your Own Pull Request
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kbtXunOw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c42q2dtpsvffg3hh12f8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kbtXunOw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c42q2dtpsvffg3hh12f8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
I have made it a habit of always reviewing my own PR even before I finalize it. When done finessing the title and description, just switch to the 'File Changes' tab and review every line once again. This is the point where I make follow-up commits for 'cleanup' as sometimes I see some unwanted commented code, a debug log, typos and more. Be your no. 1 critic, this way you won't get cheap points scored on you for a minor under-sight.&lt;/p&gt;

&lt;h2&gt;
  
  
  EOL: End of Line
&lt;/h2&gt;

&lt;p&gt;This is actually conclusion.&lt;br&gt;
Maintaining a set standard in a team requires discipline, code reviews is such one that requires the team to enforce a standard and not shy away from making changes as new patterns are discovered. Do raise the red-flag when an anti-standard PR is seen. The whole essence is to ensure quality code and business continuity seamlessly. Sometimes, I do err in code review - just keep the percentage of good on the rise until it becomes a habit.&lt;/p&gt;

&lt;p&gt;-:)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover image source: oroinc.com&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>pullrequest</category>
      <category>team</category>
    </item>
    <item>
      <title>Netssentials: Part 1 - Quick Tips for ASP.Net Core API Project</title>
      <dc:creator>Prince Tegaton</dc:creator>
      <pubDate>Sat, 05 Dec 2020 13:52:39 +0000</pubDate>
      <link>https://dev.to/princetegaton/netssentials-part-1-quick-tips-for-asp-net-core-api-project-22ec</link>
      <guid>https://dev.to/princetegaton/netssentials-part-1-quick-tips-for-asp-net-core-api-project-22ec</guid>
      <description>&lt;p&gt;&lt;em&gt;This article is the first part of the Netssential series. &lt;a href="https://github.com/PrinceTegaton/Netssentials"&gt;View project on GitHub repo&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Project organization and coding patterns will always differ for each individual's taste. Many developers do not have the chance to stamp their mark on a project as it is usually the work of a 'team lead' or 'architect' but these tips I've used over the years can be useful.&lt;/p&gt;

&lt;p&gt;Here are my top 5 tips when organizing an ASP.Net Core Web API project from scratch.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Setup Logging
&lt;/h1&gt;

&lt;p&gt;ASP.Net Core projects can frustrate you (just like any other) when logs are not setup. This can cost you precious time, mostly when moving the app within new environments. Luckily ASP.Net Core is built to handle startup errors easily when set to do so from the Program.cs file. My personal log library preference is NLog but similar configurations should exist for other libraries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Program
{
    public static void Main(string[] args)
    {
        var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();

        try
        {
            logger.Debug("Initializing application..");
            CreateHostBuilder(args).Build().Run();
        }
        catch (Exception ex)
        {
            logger.Error(ex, "An error occured while initializing application.. shutting down!");
            throw;
        }
        finally
        {
            NLog.LogManager.Shutdown();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =&amp;gt;
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =&amp;gt;
            {
                webBuilder
                .UseStartup&amp;lt;Startup&amp;gt;()
                .UseIISIntegration()
                .UseNLog(); // enable NLog
            });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  2. Tier the Startup.cs file
&lt;/h1&gt;

&lt;p&gt;This file can grow so big in a short period since almost every config goes here, this makes it harder to locate block of codes. Like many developers who do not like staring at a single 3k lines of code file, this should work. I usually separate the file according to content thereby leaving me basically with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Startup.cs&lt;/strong&gt; - basic API setup and configuration&lt;br&gt;
&lt;strong&gt;Startup.DI.cs&lt;/strong&gt; - dependency injection setups&lt;br&gt;
&lt;strong&gt;Startup.Identity.cs&lt;/strong&gt; - JWT and other identity setup&lt;/p&gt;

&lt;p&gt;All files should have &lt;code&gt;public partial class Startup&lt;/code&gt; as seen here for Startup.DI.cs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public partial class Startup 
{
    public void ConfigureDI(IServiceCollection services)
    {
        services.AddTransient&amp;lt;DbContext, SqlServerDbContext&amp;gt;();
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are then called from the Startup.cs file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public void ConfigureServices(IServiceCollection services)
{
    ConfigureLogging(services);
    ConfigureDI(services);
    ConfigureIdentity(services);
    // more section ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This leave you with a well tiered and neat configuration setup.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Dynamic Configuration Options
&lt;/h1&gt;

&lt;p&gt;This is a technique I hope to enforce on front-end applications real soon. The ability to turn a feature ON and OFF for the user without the need of killing a micro-service from the server. The below illustrate how you can use choose which config or services to enable on production environment, all from the appsettings.json file.&lt;/p&gt;

&lt;p&gt;First, create a config option class to hold all toggleable features and other config options. I call this Settings.cs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Settings
{
    public bool EnableHttps { get; set; }
    public bool EnableSwagger { get; set; }
    public bool EnableHealthCheck { get; set; }
    public bool EnableMiniProfiler { get; set; }
    public string Datastore { get; set; }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a &lt;strong&gt;Settings&lt;/strong&gt; node with all options to the appsettings.json as seen below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "ConnectionStrings": { ... },
  "Settings": {
    "Datastore": "SQLSERVER", //SQLSERVER, MYSQL, COSMOS
    "EnableHttps": false,
    "EnableSwagger": true,
    "EnableHealthCheck": true,
    "UseMiniProfiler": true
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All services are now being registered based on the config option&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public partial class Startup 
{
    public Settings _settings { get; set; } = new Settings();

    public void ConfigureServices(IServiceCollection services)
    {
        // load config from Settings.json
        Configuration.Bind(nameof(Settings), _settings);
        services.AddSingleton(_settings);

        if (_settings.EnableMiniProfiler)
            ConfigureMiniProfiler(services);

        if (_settings.EnableHealthCheck)
        {
            services.AddHealthChecks()
        .AddDbContextCheck&amp;lt;SqlServerDbContext&amp;gt;("Microsoft SQL Server Database")
        .AddCheck&amp;lt;ThirdPartyServiceHealthCheck&amp;gt;("ThirdParty Services");
        }

        if (_settings.EnableHttps)
            app.UseHttpsRedirection();

        if (_settings.EnableSwagger)
        {
            app.UseSwagger();
            app.UseSwaggerUI(options =&amp;gt; options.SwaggerEndpoint("v1/swagger.json", "Netssentials"));
        }

        if (_settings.EnableMiniProfiler)
        {
            app.UseMiniProfiler();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  4. Error Handling
&lt;/h1&gt;

&lt;p&gt;Errors must surely surface, and surely handled, not too sure about this for every dev. This can be done using a Middleware or a BaseController method. Users of an application should never see error details (type, source, stack trace, inner ex bla bla), but on development environment you surely want to see the error details (on front-end toasts or API calls) without having to check logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My BaseController.cs technique.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Route("api/[controller]/[action]")]
public class BaseController : ControllerBase
{
    public readonly ILogger Logger;
    private readonly IWebHostEnvironment _env;

    public BaseController(ILogger logger, IWebHostEnvironment env)
    {
        Logger = logger;
        _env = env;
    }

    protected IActionResult HandleError(Exception ex, string customErrorMessage = null)
    {
        ApiResponse rsp = new ApiResponse
        {
            Code = "500"
        };

        Logger.LogError(ex, customErrorMessage);

        if (_env.IsDevelopment())
        {
            rsp.Message = $"{(ex?.InnerException?.Message ?? ex.Message)} --&amp;gt; {ex?.StackTrace}";
            return StatusCode(StatusCodes.Status500InternalServerError, rsp);
        }
        else
        {
            rsp.Message = customErrorMessage ?? "An error occurred while processing your request!";
            return StatusCode(StatusCodes.Status500InternalServerError, rsp);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class UserController : BaseController 
{
    [HttpGet]
    public async Task&amp;lt;IActionResult&amp;gt; GetUserInfo(string uniquId)
    {
        try
        {
            return Ok(apiResult);
        }
        catch (Exception ex)
        {
            return HandleError(ex);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  5. Easy Debugging
&lt;/h1&gt;

&lt;p&gt;Whenever I step close to a developer debugging ASP.Net Core APIs from Visual Studio and they always have to click 'Start' or 'IIS Express' I really do pity them. This mean that for every single change you have to launch the app on a new console or browser tab.&lt;/p&gt;

&lt;p&gt;But here is a short step to allow you just build the code with 'Ctrl + B' (project) or 'Ctrl + Shift + B (solution) and continue from the client end (Postman or Web). Just do this:&lt;br&gt;
Project properties &amp;gt; Debug &amp;gt; Hosting Model: 'Out of Process'.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PsvgtoeP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/82hq6yautn60tykeb2a0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PsvgtoeP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/82hq6yautn60tykeb2a0.png" alt="s1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To prevent the app ending debug mode when you close the associated browser tab, do this:&lt;br&gt;
VS Options &amp;gt; Web Projects &amp;gt; Stop debugger when browser window is closed: 'false'.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8O8oxL-K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/58otjd4hkczkdwreforu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8O8oxL-K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/58otjd4hkczkdwreforu.png" alt="s2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are various easy hack around project structure and patterns that could be shared but these, for now, are my top 5.&lt;/p&gt;

</description>
      <category>aspnetcore</category>
      <category>dotnetcore</category>
      <category>api</category>
      <category>tips</category>
    </item>
    <item>
      <title>console.log(x): The way out</title>
      <dc:creator>Prince Tegaton</dc:creator>
      <pubDate>Wed, 25 Nov 2020 20:45:47 +0000</pubDate>
      <link>https://dev.to/princetegaton/console-log-x-the-way-out-406a</link>
      <guid>https://dev.to/princetegaton/console-log-x-the-way-out-406a</guid>
      <description>&lt;p&gt;Logging is a critical technique developers need to trace code problems and bugs irrespective of the language. Logs can be written to flat files (text), database tables, IDE/web browser consoles and many more.&lt;/p&gt;

&lt;p&gt;Web developers will always find a way to forget cleaning up the console.log(x) used in JavaScript codes. To me, this smells untidiness: leaving debug data to the eyes of the public is not clean for a professional (when left intentionally).&lt;/p&gt;

&lt;p&gt;2 years ago I came up with a technique that allow me to ignore removing logs from every single portion of my JavaScript code. Same can be implemented for any language. This is done by creating a custom log class and methods. Instead of calling console.log(x), you can do logger.log(x). On the logger class, there is a boolean variable named 'is_active =true'. On production environment, this value is set to is_active =false and all log lines will be bypassed from not being printed to console.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/PrinceTegaton/js_logger" rel="noopener noreferrer"&gt;View code on Github Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The snippet is shown below. The overloads can be ignored.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;logger.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let is_active = true;

const logtype = {
    "default": 1,
    "info": 2,
    "warning": 3,
    "error": 4,
    "exception": 5,
    "debug": 6,
    "table": 7
};

function log(data, type = logtype.default) {
    if (!is_active) return;

    try {
        switch (type) {
            case logtype.default:
                return console.log(data);
            case logtype.info:
                return console.info(data);
            case logtype.warning:
                return console.warn(data);
            case logtype.error:
                return console.error(data);
            case logtype.exception:
                return console.exception(data);
            case logtype.debug:
                return console.debug(data);
            case logtype.table:
                return console.table(data);
        }
    } catch (ex) {
        console.log(data);
    }
}

function info(data) {
    if (is_active) console.info(data);
}

function warning(data) {
    if (is_active) console.warn(data);
}

function error(data) {
    if (is_active) console.error(data);
}

function exception(data) {
    if (is_active) console.exception(data);
}

function debug(data) {
    if (is_active) console.debug(data);
}

function table(data) {
    if (is_active) console.table(data);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    window.onload = function () {
    log('hello world..');
    log('I have an information', logtype.info);
    log('But i must warn you', logtype.warn);
    log('About the errors you have made', logtype.error);
    log('Well, exceptions are not the end of the world', logtype.exception);
    log('And that calls for more debugging', logtype.debug);

var array = [
    {
        name: 'James',
        age: 21,
        location: 'Nigeria',
        role: 'Backend'
    }, {
        name: 'Mike',
        age: 19,
        location: 'Los Angeles',
        role: 'Frontend'
    }, {
        name: 'Parker',
        age: 26,
        location: 'London',
        role: 'Tester'
    }];

log(array, logtype.table);

&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result in web browser console is seen below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvftnv8wy8bkmhlj18brk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvftnv8wy8bkmhlj18brk.png" alt="web-console"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change the variable 'is_active=false' and all log activities will be stopped.&lt;/p&gt;

&lt;p&gt;PS: this does not mean you should not clean up logs from code&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>html</category>
      <category>web</category>
    </item>
  </channel>
</rss>
