开发者

Create custom logger, should I extend class from log4net

开发者 https://www.devze.com 2023-01-23 19:58 出处:网络
I am doing something unusual. I have an application, it runs as a windows service. what it does is that, it monitor one folder, when ever there is some new file put into that folder, the applicatio

I am doing something unusual.

I have an application, it runs as a windows service.

what it does is that, it monitor one folder, when ever there is some new file put into that folder, the application will do something to the file. Whenever there is an error when processing one file. I need to create a text file, and put the error/exception information into that text file. (later i can do something with this file)

so there is something like this

FileWatch, when there is a new file, do following :
     try
     {
         processing file
     }
     catch(Exception ex)
     {
         MyLogger write exception message into one new text file
     }

So far how i did it is that. I create a class for example MyLogger, whenever i new one MyLogger, it creates a text file (the 开发者_运维知识库name matters, need to be a specific format), and there is one method in side MyLogger "WriteError(string message)", it writes text into that file.

Since i used log4net in my application. Do you think i should modify my logger, to extend some class from log4net, so that i can get some benefit? (not sure what kind of benefit i will get, but log4net is a good logging framework, the way it handle text file might have thing that i do not aware)

Thanks


log4net or any other generic logger is helpful if
1) you want to have a consistent logging facility in many places across your application; and/or
2) you want the ability to customize logging format, level and so on.

From your description it sounds like there is a single point in your app where you need to log the exception in a specific way. If this is correct, you will probably gain no benefit from creating a custom logger - just write a method that logs exception to a file in the way you need.

If I misunderstood you, and there is a need for generic logger (that is, either 1) or 2) above is true), extending log4net by inheriting a logger or creating a wrapper is fine.


I've created log4net wrappers before. I find it handy to start this way as you don't always know what the logging requirements are at the start of a project. My rule has been that the log4net library can only be referenced from my own "logging" namespace. This way, the application code only calls the wrapper, and the wrapper is the only point of contact to the log4net functionality.

In the long run, it's probably worth investing in building your own logger. If you encapsulate log4net properly, you should be able to make this upgrade rather easily, without having to change your code.


Why not use Trace Listeners from the .NET framework? They provide many of the benefits of a logging network, without the need to incorporate an external framework.

Benefits include centralized log management and the ability to direct the output logs to one or more sources such as a console window, text file, or the Windows Event Log.


You should spend some time creating your own logger that does exactly what you want. This would be the best way. Is also fairly easy and you have full control on the customization so you can make the output look and feel as in log4net. You could Google for logging sample and start modifying that one.


I am not sure if I would use a log framework for this purpose. I have the impression that writing this text file in the exception case is part of your business process. Logging serves a different purpose that can be turned off without affecting business processes...

0

精彩评论

暂无评论...
验证码 换一张
取 消