NLOG Rollover Configuration - nlog

Is there a configuration in NLOG that accomplishes the following
1)A new log file should be created , when the current file exceeds a particular size for ex:- 5 MB
2)The old log files should be deleted after a configured amount of time period like for ex: - 1 day

You can find answer for your question (and examples) on page:
Size-based file archival - log files can be automatically archived by moving them to another location after reaching certain size and
Time-based file archival - log files can calso be automatically archived based on time
Try to use the second one and change log files every days. Than you can keep maximum number of archived files.

Related

Rotate logfiles on an hourly basis by appending date and hour

I wanted to implement a log rotation option in linux. I have a *.trc file where all the logs are getting written. I wanted a new log file to be created every hour. I have done some analysis and found the below
I have done some analysis and got to know about the logrotate option. Where we need to update the rotation details for a specific file in the logrotate.conf file
I wanted to know if there is an option without using the logrotate option. I wanted to rotate the logfiles on an hourly basis, so something like appending date and hour information to the log file and create new files based on the current hour information.
Im looking for some suggestions on how to implement the log rotation using the second option specified above.
Any details on the above would be really helpful
If you have control over the process that creates the logs, you could just timestamp the file at the moment of creation. This will remove the need to rename the log.
Before you write every line you check the time. If one hour passed after that file was created, you close the current file and open a new one with a new timestamp.
If you do not have control over the process, you can pipe the output of your process (stdout,stderr) to multilog, which is a binary that's part of the package daemon-tools in most Linux distros.
https://cr.yp.to/daemontools/multilog.html

Azure create filename from blob name in nLog.config

I am newbie to Azure and just digging out to my first task. we are creating logs file for error logs.
I want to create 4 diff. which has logs of 6 hours from starting of the day. Please find below my nlog.config code:
<target type="AzureBlobStorage"
name="Trace-BlobStorageLogger"
layout=""
connectionString=""
container=""
blobName="nlog-storage-trace-test-${date:format=dd-MM-yyyy}.txt"/>
Right now, it generating one file for whole day, but due to storage capacity once it is full then after logs are not logging.
We want to divide it into 6 hours each into 4 files. We want file to be created something like:
nlog-storage-trace-test-10-06-2020-0000-0600.txt
nlog-storage-trace-test-10-06-2020-0600-1200.txt
and so on.
What change is needed in blobName in target tag in nlog.config file or nay other change that fulfills my requirement.
Thanks
The "new" NLog.Extensions.AzureBlobStorage will reduce the number of writes, so it stay below 50000 file-operations per day:
https://www.nuget.org/packages/NLog.Extensions.AzureBlobStorage/
But if you want the filename to "expire" every 6 hours, then I guess you can use cachedSeconds do this:
<target type="AzureBlobStorage"
name="Trace-BlobStorageLogger"
blobName="nlog-storage-trace-test-${date:format=dd-MM-yyyy_hhmm:cachedSeconds=21600}.txt"/>
Alternative you can write/register your own custom NLog LayoutRenderer:

Filter recent files in Logic Apps' SFTP when files are added/modified trigger

I have this Logic App that connects to an SFTP server and it's triggered by the "files are added or modified" trigger. It's set to run every 10 minutes, looking for new/modified files and copying them to an Azure storage account.
The problem is that this SFTP server path is set to overwrite a set of files every X minutes (I have no control over this) and so, pretty often the Logic App overlaps with the update process of these files and downloads files that are still being written. The result is corrupted files.
Is there a way to add a filter to the When files are added or modified (properties only) so that it only takes into consideration files with a modified date of, at least, 1 minute old?
That way, files that are currently being written won't be added to the list of files to download. The next run of the Logic App would then fetch this ignored files and so on.
UPDATE
I've found a Trigger Conditions in the trigger's setting but I can't find any documentation about it.
According to test the trigger "When files are added or modified", it seems we can not add a filter in the trigger to filter the records which are modified at least 1 minute ago. We can just get the List of Files LastModified datetime and loop them, use "If" condition to judge if we should download it.
Update:
The expression in the screenshot is:
sub(ticks(utcNow()), ticks(triggerBody()?['LastModified']))
Update workaround
Is it possible to add a "Delay" action when the last modified time less than 1 minute ? For example, if the last modified time less than 60 seconds, use "Delay" to wait 5 minutes until the overwrite operation complete, then do the download.
I check the sample #equals(triggers().code, 'InternalServerError'), actually it uses the condition functions in Logical comparison functions, so the key word is make sure the property you want to filter is in the trigger or triggerBody or you will get the below error.
So I change the expression to like #greater(triggerBody().LastModified,'2020-04-20T11:23:00Z'), this could filter the file modified less than 2020-04-20T11:23:00Z not trigger the flow.
Also you could use other function like less ,greaterOrEquals etc in the Logical comparison functions.

Can I force the archiving of Nlog files

I've made a page in my website where the admin can see all the errorfiles.
I've set the archiving to 'day', so for every day where an error occured I have a file called error.yyyyMMdd.txt (in a subfolder called archives) and for today I have the file 'error.txt'
What happens is that when I have a few days without errors, the file 'error.txt' is not touched, so the file 'errors.txt' is not from today, but from lets say 5 days ago, and in the archives subfolder, I don't have an error file for the situation five days ago.
Is there a way to 'force' Nlog to perform it's archiving and thereby create the archive file?
This isn't possible (yet).
If this will be added, it will be added as an method on the FileTarget class

Logstash file limit?

I am running logstash 1.4.1 and ES 1.1.1. Logstash is reading log files from a central server (multiple servers logs present here usomg rsyslog), so for each day a dir like 2014-11-17 is created and file is created.
Problem I faced was that the first time I ran logstash it gave
Caused by: java.net.SocketException: Too many open files
So then I changed the nofile limit to 64000 in /etc/security/limits.conf and it worked fine.
Now, my problem is that with new files being created each day my number of files number will go on increasing and logstash will keep a handle on all open files.
How do others handle log streams when number of files are too large to be handled?
Shall I set it to unlimited?
If you archive the files from your server, logstash will stop watching them and release the file handle.
If you don't delete or move them, maybe there's a file pattern that only matches new files? Sometimes the current file is "foo.log" before being rotated to "foo.2014-11-17.log".
Logstash Forwarder (a lighter-weight shipper than the full Logstash) has a concept of "Dead Time", where it will stop watching a file if it's been inactive (default 24 hours).

Resources