I have a bunch of client projects, where I started seeing error logs mentioning ImageProcessor like
ImageProcessor.Common.Exceptions.ImageProcessingException: ProcessImageAsync 609 : Not Found or
ImageProcessor.Common.Exceptions.ImageProcessingException: ProcessImageAsync 609 : No image exists at C:\home\site\wwwroot\test.jpg
I found out, that every time you request an image, with querystring parameters triggering ImageProcessor - like
format and so forth - ImageProcessor will log an error in your tracelogs like the above if the image is not found.
At first, I didn't care, I had rather good control over which images were requested with ImageProcessor parameters, so a quick broken link check later, and no broken image urls were left.
But one project kept logging these errors. Apparently, someone was deeplinking to non-existing images with parameters triggering ImageProcessor. And the log files were getting enormous, with all the error messages from ImageProcessor. Something needed to be done.
I could have turned off logging completely, but then I would miss valuable logs about other stuff in the project, so I asked in the community Discord channel.
It wasn't long before the always helpful Sebastiaan Janssen suggested adding a filter to the log settings, to filter them out. What a simple and brilliant way of controlling this.
So now, I have added the following to the projects Serilog config file, found in
<configuration> <appSettings> <add key="serilog:minimum-level:override:ImageProcessor.Web.HttpModules.ImageProcessingModule" value="Fatal" /> </appSettings> </configuration>
This setting tells Serilog that messages from
ImageProcessor.Web.HttpModules.ImageProcessingModule should only be recorded when their level is at least
Fatal. And since
Fatal is higher than
Error, I no longer get those exceptions.
Umbraco 7 uses log4net for logging instead of Serilog which is used in Umbraco 8, so the above example can't be used for Umbraco 7. However, Matthew Hart jumped into the Discord conversation and suggested the following config setting for the log4net config in Umbraco 7 (located in /config/log4net.config), in case you have a similar problem on that version.
<log4net> <appender name="rollingFile" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="ImageProcessor.Web" /> <acceptOnMatch value="false" /> </filter> </appender> </log4net>
The config also revealed to me, that I could create a filter, letting
Debug messages from my own code be recorded, while keeping the general level at
Thus, making it possible for me to actually find the debug messages from my own code when needed, without being buried in the huge pile of debug messages from all other parts of the project. Win-win!