[patch] macro report_json_filtered

Mark Martinec Mark.Martinec+amavis at ijs.si
Fri Feb 12 18:13:56 CET 2016


On 2014-12-04 15:30, Markus Benning wrote:
> Hello,
> 
> the attached patch adds a log macro report_json_filtered to amavisd.
> 
> This macro is like report_json but will remove all specified fields 
> from
> the output.
> 
> Example:
> 
> $logline_maxlen = ( 32*1024 ) - 50; # 32k max message size, keep 50
> bytes for syslog
> $log_templ = <<'EOD';
> [:report_json_filtered|@timestamp|subject|subject_rot13|time_iso_week_date|time_unix|digest_body|type|user_agent|partition|originating]
> EOD
> 
> It may be usefull for filtering unused fields to save diskspace and to
> avoid logging of message content (subject, user_agent).
> 
>  Markus

Responding to a year-old suggestion...


The feature will be in the coming 2.11.0. From release notes:


- A log template macro 'report_json' can now take arguments, which can
   include or exclude fields (key/values) from the JSON report object.
   Arguments to a macro are either field names (keys) to be included
   in a report, or are field names to be excluded, each prefixed with
   an exclamation mark, to produce a report with all but excluded fields.

   Field names are case-sensitive. The order of fields in a serialized
   JSON object is unaffected by the order of field names in a filter.
   Unknown or non-present field names in a filter are silently ignored.

   Example:
     [:report_json|mail_id|action|content_type|queued_as|mail_from|size]
   or:
     [:report_json|!recipients|!elapsed|!os_fp|!subject|!subject_rot13]

   For better clarity, instead of listing field names as individual
   arguments to a macro, it is also possible to provide a single argument
   in which field names are separated by whitespace:
     [:report_json|mail_id action content_type queued_as mail_from size]
   or:
     [:report_json|!message !recipients !to_addr !elapsed !os_fp
        !subject !subject_rot13 !user_agent !tests !tests_ham 
!tests_spam]

   A setting in a config file can look like:
     $log_templ = '[:report_json|mail_id action queued_as mail_from]';

   If at least one field name has an exclamation mark (i.e. is to be
   excluded), all but excluded fields are implied, so any field names
   without an exclamation mark are redundant.

   Currently this is a simple filter where subfields of a structured
   object cannot be selectively filtered (e.g. elapsed.SpamCheck).

   Based on a patch by Markus Benning.


Thanks for the suggestion!

   Mark


More information about the amavis-users mailing list