Log4net is one of the oldest and most traditional logging frameworks for .NET. It originally started as a port of log4j, a Java logging framework. Over the years, log4net acquired more capabilities. Currently, log4net has the status of a dormant project, but it continues to be a popular alternative when it comes to .NET logging. This post focuses on log4net and .NET log management.
As we’ve already mentioned, log4net is one of the first logging frameworks for the .NET world. Along with NLog and Serilog, log4net is still one of the most popular logging frameworks for the platform.
The next question then is this: what is a logging framework?
A logging framework is a packaged solution to the problems of logging. While you could use Console.WriteLine() to write some messages about your app’s behavior and get away with calling it “logging,” such an approach has serious limitations. A real-world logging approach needs, among other things, to be able to do the following:
– Write to different destinations
– Apply proper formatting to messages, including using structured logging
– Use the correct logging levels
– Add context to each log entry, in the form of tags, categories, and even the thread name
– Add the timestamp to each log event
There are free solutions available as logging frameworks. When you use a logging framework instead of rolling out your own logging solution, you’re standing on the shoulders of giants, leveraging all the experience of those who solved these problems in the past. At the same time, it frees you to concentrate on the problems that matter the most for you.
A company called Neoworks Limited started log4net in 2001 as a private effort to port log4j to the .NET Framework. In the same year, the project was published to SourceForge under the Apache Software License, with the first public release happening in September.
In 2004, Neoworks donated the log4net project to the Apache Software Foundation. Since then, log4net has been part of the Apache Logging Services project.
Even though you can download both the source and the binaries, the easiest way to install log4net nowadays is via NuGet.
Using the NuGet Package Manager Console in Visual Studio, you can install log4net with the following command:
As of this writing, the latest version is 2.0.8, released in 2017.
Though you can configure log4net programmatically, using a config file is a far more flexible approach. You can configure log4net using a .XML file.
The first thing you’ll do is add a new .XML file to your project. Call it log4net.config.
The next step is to configure our project, so the configuration file is copied to the output folder when the project is built. Right-click the file you’ve just created, then click on Properties.
Then, make sure the Build Action property is set to None and the Copy to Output Directory property is set to Copy always.
The next step is to fill in the configuration. Open the file and paste in the following content:
<level value="ALL" />
<appender-ref ref="file" />
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="myapp.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
The final step is to open the AssemblyInfo.cs file for the project and add the following line to it:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
That’s pretty much it when it comes to performing a basic configuration for log4net.
A big yet often overlooked facet of logging is visualization. Log entries are a unique opportunity to gather valuable information from disparate sources. By carefully analyzing your logs, you have the opportunity to take a look at your whole IT infrastructure and obtain knowledge you wouldn’t be able to get otherwise.
For instance, YALV is an open-source tool providing visualization for log4net logs—and also other frameworks—in a user-friendly way.
SolarWinds® Loggly® also offers visualization features for log4net and only requires you to install one additional package.
Logging is a vital part of software development. This is true now, and it was already true almost 20 years ago when log4net was first developed as a port of log4j. Since then, the project grew, changed, and was donated to the Apache Foundation. And now, the status of the log4net project is dormant, with the last version released in 2017.
Log4net no longer reigns undisputed; in the almost two decades since its release, strong competitors such as NLog and Serilog showed up. Despite all this, log4net continues to be one of the most popular logging tools for the .NET space. It has several useful features: it’s thread-safe, optimized for speed, and can write to many different targets.
Where should you go from here? What should your next steps be?
There are many possible answers to those questions, but the correct one is certainly education. Try to learn more not only about .NET logging, but logging in general. You might pursue:
– Understanding logging levels in depth
– Learning more about log formatting
– Learning more about structured logging and how it helps in log parsing and analyzing
– Getting started with log analysis
– Getting to know logging best practices, both in general and also targeted at specific tech stacks
You should also try to learn more about the available tools. There are plenty of logging tools available, including both commercial and open-source tools. These tools cater to a plethora of different needs.
SolarWinds Loggly offers a complete log management solution with advanced analysis and visualization capabilities. Integrations are another area where Loggly shines: by offering integrations with tools like Slack, Microsoft Teams, Jira, and GitHub, Loggly adapts to the workflow you already have, instead of forcing you to adapt to its structures. You might want to give Loggly a try.
This post was written by Carlos Schults. Carlos is a .NET software developer with experience in both desktop and web development, and he’s now trying his hand at mobile. He has a passion for writing clean and concise code, and he’s interested in practices that help you improve app health, such as code review, automated testing, and continuous build.