├── cups.json ├── sssd_log.json ├── rhsm.json ├── anaconda_syslog.json ├── dracut.json ├── catalina.json ├── mythbackend.json ├── README.md ├── samba-log.json ├── candlepin.json ├── rhn_xmlrpc.json ├── make_format.pl ├── openldap.json ├── squid.json ├── selinux_audit.json ├── strace.json ├── log4j.json ├── cfme_log.json ├── exim.json ├── httpd.json ├── katello.json └── LICENSE /cups.json: -------------------------------------------------------------------------------- 1 | { 2 | "cups_log" : { 3 | "title" : "CUPS log format", 4 | "description" : "Log format used by the Common Unix Printing System", 5 | "regex" : { 6 | "default" : { 7 | "pattern" : "^(?[IEW]) \\[(?\\d{2}/\\w{3}/\\d{4}:\\d{2}:\\d{2}:\\d{2} [+-]\\d{4})\\] (?:(?
\\w+): )?(?.*?)$" 8 | } 9 | }, 10 | "level" : { 11 | "error" : "E", 12 | "warning" : "W" 13 | }, 14 | "value" : { 15 | "level" : { "kind" : "string", "identifier" : true }, 16 | "section" : { "kind" : "string", "identifier" : true }, 17 | "body" : { "kind" : "string" } 18 | }, 19 | "sample" : [ 20 | { 21 | "line" : "I [04/Nov/2010:17:37:40 -0400] Allowing up to 100 client connections per host." 22 | }, 23 | { 24 | "line" : "I [04/Nov/2010:17:37:40 -0400] LoadPPDs: Wrote \"/etc/cups/ppds.dat\", 14 PPDs..." 25 | }, 26 | { 27 | "line" : "E [04/Nov/2010:17:37:40 -0400] StartListening: Unable to find IP address for server name \"localhost.localdomain\" - Host name lookup failure" 28 | } 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /sssd_log.json: -------------------------------------------------------------------------------- 1 | { 2 | "sssd_log" : { 3 | "title" : "SSSD log format", 4 | "description" : "Log format used by the System Security Services Daemon", 5 | "url" : "http://fedorahosted.org/sssd", 6 | "regex" : { 7 | "core" : { 8 | "pattern" : "^\\((?\\w{3} \\w{3} ( \\d|\\d{2}) \\d{2}:\\d{2}:\\d{2} \\d{4})\\) \\[\\[?(?:sssd|sssd(?\\[.*?\\]))\\]?\\] \\[(?\\w+)\\] \\((?0x[0-9a-fA-F]{4}|\\d)\\): (?.*)$" 9 | } 10 | }, 11 | "value" : { 12 | "module" : { "kind" : "string", "identifier" : true }, 13 | "function" : { "kind" : "string", "identifier" : true }, 14 | "debug_level" : { "kind" : "string", "identifier" : true }, 15 | "body" : { "kind" : "string" } 16 | }, 17 | "sample" : [ 18 | { 19 | "line" : "(Tue Mar 31 06:03:46 2015) [sssd[be[default]]] [sysdb_search_by_name] (0x0400): No such entry" 20 | }, 21 | { 22 | "line" : "(Tue Mar 31 05:58:38 2015) [sssd] [start_service] (0x0100): Queueing service LDAP for startup" 23 | }, 24 | { 25 | "line" : "(Sun Sep 13 04:02:08 2015) [sssd[nss]] [client_recv] (5): Client disconnected!" 26 | } 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /rhsm.json: -------------------------------------------------------------------------------- 1 | { 2 | "rhsm_log" : { 3 | "title" : "rhsm log format", 4 | "description" : "Log format used by Red Hat Subscription Manager", 5 | "url" : "http://rhsm", 6 | "regex" : { 7 | "main" : { 8 | "pattern" : "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:,\\d+)?) \\[(?\\w+)\\] (?\\w+):(?\\d+) @(?\\w+\\.py):(?\\d+) - (?.*)$" 9 | } 10 | }, 11 | "value" : { 12 | "process" : { "kind" : "string", "identifier" : true }, 13 | "pid" : { "kind" : "integer", "identifier" : true }, 14 | "file" : { "kind" : "string", "identifier" : true }, 15 | "line" : { "kind" : "integer", "identifier" : true }, 16 | "body" : { "kind" : "string" } 17 | }, 18 | "sample" : [ 19 | { 20 | "line" : "2016-08-26 10:38:06,058 [DEBUG] yum:31581 @identity.py:131 - Loading consumer info from identity certificates." 21 | }, 22 | { 23 | "line" : "2016-08-26 10:38:06,064 [INFO] yum:31581 @connection.py:778 - Connection built: http_proxy=proxy.example.com:3128 host=subscription.rhn.redhat.com port=443 handler=/subscription auth=identity_cert ca_dir=/etc/rhsm/ca/ verify=False" 24 | } 25 | ] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /anaconda_syslog.json: -------------------------------------------------------------------------------- 1 | { 2 | "anaconda_syslog" : { 3 | "title" : "Anaconda Syslog log format", 4 | "description" : "Log format used by Anaconda when issuing syslog lines.", 5 | "regex" : { 6 | "default" : { 7 | "pattern" : "^(?\\d{2}:\\d{2}:\\d{2}(?:,\\d+)?) (?ERR|WARNING|INFO|NOTICE|DEBUG) (?\\w+):\\s*(?.*)$" 8 | } 9 | }, 10 | "value" : { 11 | "alert_level" : { "kind" : "string" }, 12 | "subsystem" : { "kind" : "string", "identifier" : true }, 13 | "body" : { "kind" : "string" } 14 | }, 15 | "level" : { 16 | "error" : "ERR", 17 | "warning": "WARNING", 18 | "debug" : "DEBUG|INFO|NOTICE" 19 | }, 20 | "sample" : [ 21 | { 22 | "line" : "13:27:11,205 WARNING kernel:raid6: int64x1 1156 MB/s" 23 | }, 24 | { 25 | "line" : "13:51:28,645 INFO kernel:ADDRCONF(NETDEV_UP): eth3: link is not ready" 26 | }, 27 | { 28 | "line" : "13:29:43,392 DEBUG kernel:SELinux: initialized (dev sdb2, type ext4), uses xattr" 29 | }, 30 | { 31 | "line" : "13:51:28,647 NOTICE NetworkManager: ifcfg-rh: updating /etc/sysconfig/network-scripts/ifcfg-eth2" 32 | } 33 | ] 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /dracut.json: -------------------------------------------------------------------------------- 1 | { 2 | "dracut_log" : { 3 | "title" : "Dracut log format", 4 | "description" : "Log format used by Dracut init maker", 5 | "regex" : { 6 | "default" : { 7 | "pattern" : "^(?\\w{3} \\w{3} (?:\\d{2}| \\d) \\d{2}:\\d{2}:\\d{2} \\w+ \\d{4}) (?\\w+): (?.*)$" 8 | } 9 | }, 10 | "value" : { 11 | "alert_level" : { "kind" : "string" }, 12 | "body" : { "kind" : "string" } 13 | }, 14 | "sample" : [ 15 | { 16 | "line" : "Fri Apr 17 15:13:15 AEST 2015 Info: Executing /sbin/dracut -f /boot/initramfs-2.6.32-504.12.2.el6.x86_64.img 2.6.32-504.12.2.el6.x86_64" 17 | }, 18 | { 19 | "line" : "Fri Apr 17 15:13:15 AEST 2015 Info: Installing /lib64/libc-2.12.so" 20 | }, 21 | { 22 | "line" : "Fri Jun 26 14:39:53 AEST 2015 Info: Stripping '/tmp/initramfs.wIHD1f/initqueue-timeout/99rootfallback.sh'" 23 | }, 24 | { 25 | "line" : "Fri Jun 26 14:40:12 AEST 2015 Info: Wrote /boot/initramfs-2.6.32-504.23.4.el6.x86_64.img" 26 | }, 27 | { 28 | "line" : "Fri Jun 26 14:40:12 AEST 2015 Info: -rw-------. 1 root root 19404550 Jun 26 14:40 /boot/initramfs-2.6.32-504.23.4.el6.x86_64.img" 29 | } 30 | ] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /catalina.json: -------------------------------------------------------------------------------- 1 | { 2 | "catalina_log" : { 3 | "title" : "catalina log format", 4 | "description" : "Log format used by catalina", 5 | "url" : "http://catalina", 6 | "regex" : { 7 | "main" : { 8 | "pattern" : "^(?\\d{4}[/-]\\d{2}[/-]\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\,\\d+)?) \\[(?[\\w-]+)\\] (?\\w+)\\s+(?[\\w._]+)?(?:- )?(?.*)$" 9 | } 10 | }, 11 | "value" : { 12 | "class" : { "kind" : "string", "identifier" : true }, 13 | "event" : { "kind" : "string", "identifier" : true }, 14 | "exception" : { "kind" : "string", "identifier" : true }, 15 | "body" : { "kind" : "string" } 16 | }, 17 | "timestamp-format" : [ 18 | "%b %d, %Y %I:%M:%S %p", 19 | "%Y-%m-%d %H:%M:%S", 20 | "%Y/%m/%d %H:%M:%S" 21 | ], 22 | "sample" : [ 23 | { 24 | "line" : "2015-09-21 13:30:26,906 [TP-Processor37] WARN com.redhat.rhn.common.hibernate.EmptyVarcharInterceptor - Object com.redhat.rhn.domain.user.legacy.PersonalInfo is setting empty string title" 25 | }, 26 | { 27 | "line" : "2015-09-21 15:03:08,614 [TP-Processor91] WARN org.hibernate.engine.loading.CollectionLoadContext - On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries" 28 | } 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /mythbackend.json: -------------------------------------------------------------------------------- 1 | { 2 | "mythbackend_log" : { 3 | "title" : "MythTV Backend log format", 4 | "description" : "Log format used by the MythTV backend process", 5 | "url" : "http://mythtv.org", 6 | "regex" : { 7 | "line" : { 8 | "pattern" : "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?) (?[CDEINW]) \\[(?\\d+)/(?\\d+)\\] (?\\w+) (?\\w+\\.cpp):(?\\d+) \\((?\\w+)\\) - (?.*)$" 9 | } 10 | }, 11 | "level" : { 12 | "critical" : "C", 13 | "debug" : "D", 14 | "error" : "E", 15 | "info" : "I", 16 | "trace" : "N", 17 | "warning" : "W" 18 | }, 19 | "value" : { 20 | "num1" : { "kind" : "integer" }, 21 | "num2" : { "kind" : "integer" }, 22 | "context" : { "kind" : "string", "identifier" : true }, 23 | "filename" : { "kind" : "string", "identifier" : true }, 24 | "line" : { "kind" : "integer", "identifier" : true }, 25 | "function" : { "kind" : "string", "identifier" : true } 26 | }, 27 | "sample" : [ 28 | { 29 | "line" : "2016-03-19 17:40:00.449788 C [3053/3053] thread_unknown mythcommandlineparser.cpp:2595 (ConfigureLogging) - mythbackend version: fixes/0.27" 30 | } 31 | ] 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Log format description files for lnav 2 | 3 | [http://lnav.org](lnav) is a powerful log file reader, designed to take 4 | multiple log files and order them by date. It understands log file formats 5 | using regular expresions and can highlight sections of line, find errors 6 | and warnings, and more. 7 | 8 | This repository is for the log file format descriptions I've written so far. 9 | 10 | You can install these by simply checking this directory out in your 11 | '~/.lnav/formats' directory. 12 | 13 | # lnav version 14 | 15 | Some of these formats use features that are only available in lnav version 16 | 0.8.0 or above. If you get warnings, try renaming the offending files to 17 | .json-unused to see if this fixes things. 18 | 19 | # Easy creation of formats 20 | 21 | I now provide a new tool, `make_format.pl`, which takes a series of lines from 22 | stdin and turns them into sample lines in a new format. This can, for 23 | instance, be used by marking several significant lines in lnav and issuing the 24 | command: 25 | 26 | `:pipe-to perl path/to/make_format.pl -name example -output example_log.json` 27 | 28 | Using the `-name` or `-n` option sets the name in the format. This is lazy, 29 | so you'll need to edit it to suit yourself. If this option is not specified 30 | the format name is 'NEW' throughout. 31 | 32 | Using the `-output` or `-o` option sets the destination for the new format. 33 | If this is not specified the result will be written to standard output. 34 | -------------------------------------------------------------------------------- /samba-log.json: -------------------------------------------------------------------------------- 1 | { 2 | "smb_log" : { 3 | "title" : "Samba log format", 4 | "description" : "Log format used by Samba", 5 | "url" : "http://samba.org", 6 | "regex" : { 7 | "debug_line" : { 8 | "pattern" : "^\\[(?\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?),\\s+(?\\d+)(?:, pid=(?\\d+))?(?:, effective\\((?\\d+), (?\\d+)\\))?(?:, real\\((?\\d+), (?\\d+)\\))?(?:, class=(?\\w+))?\\]\\s(?\\S+\\.c):(?\\d+)\\((?\\w+)\\)$" 9 | } 10 | }, 11 | "value" : { 12 | "pid" : { "kind" : "integer", "identifier" : true }, 13 | "file" : { "kind" : "string", "identifier" : true }, 14 | "line" : { "kind" : "integer" }, 15 | "function" : { "kind" : "string", "identifier" : true }, 16 | "debug_level" : { "kind" : "integer" }, 17 | "body" : { "kind" : "string" } 18 | }, 19 | "sample" : [ 20 | { 21 | "line" : "[2015/06/14 04:12:00.513900, 1] ../source3/smbd/service.c:891(make_connection_snum)" 22 | }, 23 | { 24 | "line" : "[2015/07/02 15:55:26.512502, 5, pid=58201, effective(0, 0), real(0, 0)] ../source3/lib/smbldap.c:1249(smbldap_search_ext)" 25 | }, 26 | { 27 | "line" : "[2015/06/18 12:43:09, 10, pid=47821, effective(0, 0), real(0, 0), class=registry] ../source3/registry/reg_backend_db.c:1836(regdb_unpack_values)" 28 | }, 29 | { 30 | "line" : "[2015/04/07 13:21:59, 3] nmbd/nmbd_incomingrequests.c:456(process_name_query_request)" 31 | } 32 | ] 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /candlepin.json: -------------------------------------------------------------------------------- 1 | { 2 | "candlepin_log" : { 3 | "title" : "Candlepin log format", 4 | "description" : "Log format used by Candlepin registration system", 5 | "regex" : { 6 | "main" : { 7 | "pattern" : "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:,\\d{3})?(?:[+-]\\d{4})?) (?:\\[(req=(?[0-9a-f-]+)|=), org=(?\\w*)\\] (?\\w+) (?[\\w.]+) - )?(?.*?)$" 8 | } 9 | }, 10 | "value" : { 11 | "req" : { "kind" : "string", "identifier" : true }, 12 | "org" : { "kind" : "string", "identifier" : true }, 13 | "alert_level" : { "kind" : "string" }, 14 | "module" : { "kind" : "string", "identifier" : true }, 15 | "body" : { "kind" : "string" } 16 | }, 17 | "sample" : [ 18 | { 19 | "line" : "2015-04-17 09:41:50,544 [=, org=] INFO org.candlepin.guice.CustomizableModules - Found custom module module.config.katello" 20 | }, 21 | { 22 | "line" : "2015-04-17 09:41:56,320 [req=f91d4a84-020d-4874-9741-3979d0baf58d, org=] INFO org.candlepin.common.filter.LoggingFilter - Request: verb=GET, uri=/candlepin/status" 23 | }, 24 | { 25 | "line" : "2015-04-17 09:42:39+0200 principalType=trusteduser principal=admin target=OWNER entityId=8ab219c64cc653a7014cc6545a6c0001 type=CREATED owner=8ab219c64cc653a7014cc6545a6c0001" 26 | }, 27 | { 28 | "line" : "2015-04-17 10:49:21,912 [req=ec7867ea-2501-4036-bb08-e2d830720cb5, org=npr_goep_hm_com] INFO org.candlepin.common.filter.LoggingFilter - Response: status=200, content-type=\"application/json\", time=235ms" 29 | } 30 | ] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /rhn_xmlrpc.json: -------------------------------------------------------------------------------- 1 | { 2 | "pjw_xmlrpc_log" : { 3 | "title" : "RHN server XMLRPC log format", 4 | "description" : "Generated by Satellite's XMLRPC component", 5 | "url" : "https://access.redhat.com/products/red-hat-satellite", 6 | "regex" : { 7 | "main" : { 8 | "pattern" : "^(?\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2} [+-]?\\d{2}:\\d{2}) (?\\d+) (?\\S+): (?\\w+)/(?[\\w.-]+)(?:\\((?:(?\\d+), ?)?(?.*?),?\\))?$" 9 | } 10 | }, 11 | "value" : { 12 | "pid" : { "kind" : "integer", "identifier" : true }, 13 | "client_ip" : { "kind" : "string", "identifier" : true }, 14 | "client_id" : { "kind" : "string", "identifier" : true }, 15 | "module" : { "kind" : "string" }, 16 | "function" : { "kind" : "string", "identifier" : true }, 17 | "args" : { "kind" : "string" } 18 | }, 19 | "sample" : [ 20 | { 21 | "line" : "2016/06/21 14:01:19 +01:00 29079 172.28.150.58: xmlrpc/queue.get(1000015242, 2, 'checkins enabled')" 22 | }, 23 | { 24 | "line" : "2015/05/24 07:48:21 -05:00 767 10.206.22.17: xmlrpc/up2date.listChannels(1000011979,)" 25 | }, 26 | { 27 | "line" : "2015/05/24 07:48:22 -05:00 1377 10.184.37.105: xmlrpc/registration.welcome_message('lang: None',)" 28 | }, 29 | { 30 | "line" : "2015/05/24 07:48:22 -05:00 759 10.49.10.30: xmlrpc/registration.register_osad" 31 | }, 32 | { 33 | "line" : "2015/05/24 07:48:22 -05:00 759 10.49.10.30: rhnServer/server_certificate.valid('Server id ID-1000019942 not found in database',)" 34 | } 35 | ] 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /make_format.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | 3 | use warnings; 4 | use strict; 5 | use autodie; 6 | 7 | use Getopt::Long; 8 | 9 | my $format_name = 'NEW'; 10 | my $output_file = '-'; 11 | GetOptions( 12 | 'name|n=s' => \$format_name, 13 | 'output|o=s' => \$output_file, 14 | ); 15 | 16 | my $header = '{ 17 | "NEW_log" : { 18 | "title" : "NEW log format", 19 | "description" : "Log format used by NEW", 20 | "url" : "http://NEW", 21 | "regex" : { 22 | "debug_line" : { 23 | "pattern" : "^(?\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?) (?.*)$" 24 | } 25 | }, 26 | "value" : { 27 | "pid" : { "kind" : "integer", "identifier" : true }, 28 | "body" : { "kind" : "string" } 29 | }, 30 | "sample" : [ 31 | '; 32 | # yep, we still need to double the slashes inside single quotes. 33 | $header =~ s{\\}{\\\\}g; 34 | my $sample_prefix = ' { 35 | "line" : "'; 36 | my $sample_suffix = '" 37 | }'; 38 | my $footer = ' 39 | ] 40 | } 41 | } 42 | '; 43 | 44 | # Replace format name if necessary 45 | if ($format_name ne 'NEW') { 46 | $header =~ s{NEW}{$format_name}go; 47 | }; 48 | 49 | # Read lines in, strip, and escape double quotes and backslashes. 50 | my @lines; 51 | while (<>) { 52 | chomp; tr/\r//d; 53 | s{\\}{\\\\}g; 54 | s{"}{\\"}g; 55 | push @lines, $_; 56 | } 57 | 58 | # Open output, or stdout if requested 59 | my $ofh; 60 | if ($output_file eq '-') { 61 | $ofh = *STDOUT; 62 | } else { 63 | open $ofh, '>', $output_file; 64 | } 65 | 66 | # Print the template; 67 | print $ofh $header; 68 | print $ofh join(",\n", map { $sample_prefix . $_ . $sample_suffix } @lines); 69 | print $ofh $footer; 70 | 71 | close $ofh; 72 | -------------------------------------------------------------------------------- /openldap.json: -------------------------------------------------------------------------------- 1 | { 2 | "openldap" : { 3 | "title" : "OpenLDAP log format", 4 | "description" : "Log format used by the Directory Services daemon for OpenLDAP", 5 | "regex" : { 6 | "main" : { 7 | "pattern" : "^\\[(?\\d{2}/\\w{3}/\\d{4}:\\d{2}:\\d{2}:\\d{2}(?:\\d+)? [+-]\\d{4})\\] (?:- )?(?:conn=(?\\d+) )?(?:fd=(?\\d+) )?(?:op=(?\\d+) (?\\w+) )?(?:slot=(?\\d+) )?(?:(?(?:\\w+ )?connection) from (?\\S+) to (?\\S+)|(?.*?))$" 8 | } 9 | }, 10 | "value" : { 11 | "conn" : { "kind" : "string", "identifier" : true }, 12 | "fd" : { "kind" : "string", "identifier" : true }, 13 | "op" : { "kind" : "string", "identifier" : true }, 14 | "slot" : { "kind" : "string", "identifier" : true }, 15 | "source" : { "kind" : "string", "identifier" : true }, 16 | "dest" : { "kind" : "string", "identifier" : true }, 17 | "opname" : { "kind" : "string", "identifier" : true }, 18 | "body" : { "kind" : "string" } 19 | }, 20 | "sample" : [ 21 | { 22 | "line" : "[18/Jun/2015:12:59:59 +1000] conn=48645 fd=133 slot=133 connection from 192.168.231.146 to 192.168.7.140" 23 | }, 24 | { 25 | "line" : "[18/Jun/2015:13:00:00 +1000] conn=48645 TLS1.2 128-bit AES" 26 | }, 27 | { 28 | "line" : "[18/Jun/2015:13:00:00 +1000] conn=48645 op=1 BIND dn=\"cn=Replication Manager example.intranet-pki-tomcat,ou=csusers,cn=config\" method=128 version=3" 29 | }, 30 | { 31 | "line" : "[18/Jun/2015:13:00:00 +1000] conn=48645 op=1 RESULT err=0 tag=97 nentries=0 etime=0 dn=\"cn=replication manager example.intranet-pki-tomcat,ou=csusers,cn=config\"" 32 | }, 33 | { 34 | "line" : "[13/Jun/2015:15:04:21 +1000] slapd_ldap_sasl_interactive_bind - Error: could not perform interactive bind for id [] mech [GSSAPI]: LDAP error -2 (Local error) (SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (Ticket expired)) errno 2 (No such file or directory)" 35 | }, 36 | { 37 | "line" : "[22/Apr/2016:07:44:24 -0400] - spsusers202: Indexed 49512000 entries (15%)." 38 | } 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /squid.json: -------------------------------------------------------------------------------- 1 | { 2 | "squid_access_log" : { 3 | "title" : "Squid access log format", 4 | "description" : "Log format used by the Squid HTTP cache", 5 | "url" : "http://wiki.squid-cache.org/Features/LogFormat", 6 | "regex" : { 7 | "default" : { 8 | "pattern" : "^(?\\d+(?:\\.\\d{3})?)\\s+(?\\d+)\\s+(?(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})) (?\\w+)/(?\\d+) (?\\d+) GET (?https?://\\S+) (?\\w+|-) (?\\w+)(?:/(?\\S+)) (?\\w+/[\\w-]+|-)$" 9 | } 10 | }, 11 | "timestamp-format" : [ "%s.%i" ], 12 | "value" : { 13 | "duration" : { "kind" : "integer" }, 14 | "client" : { "kind" : "string", "identifier" : true }, 15 | "req_type" : { "kind" : "string", "identifier" : true }, 16 | "response_code" : { "kind" : "integer", "identifier" : true }, 17 | "resp_size" : { "kind" : "integer" }, 18 | "body" : { "kind" : "string" }, 19 | "method" : { "kind" : "string", "identifier" : true }, 20 | "source" : { "kind" : "string", "identifier" : true }, 21 | "mime_type" : { "kind" : "string", "identifier" : true } 22 | }, 23 | "sample" : [ 24 | { 25 | "line" : "1436673100.317 488 127.0.0.1 TCP_REFRESH_MODIFIED/200 1783 GET http://example.org/example.xml - DIRECT/10.20.130.12 text/xml" 26 | }, 27 | { 28 | "line" : "1436691398.468 1616 127.0.0.1 TCP_SWAPFAIL_MISS/200 2512822 GET http://example.org/example.gz - DIRECT/10.20.130.12 application/x-gzip" 29 | }, 30 | { 31 | "line" : "1436799758.045 955 127.0.0.1 TCP_MISS/200 70113 GET http://example.org/example.bin - DIRECT/10.20.130.12 application/octet-stream" 32 | } 33 | ] 34 | }, 35 | "squid_daemon_log" : { 36 | "title" : "Squid daemon log format", 37 | "description" : "Log format used by the Squid HTTP cache", 38 | "url" : "http://wiki.squid-cache.org/Features/LogFormat", 39 | "regex" : { 40 | "default" : { 41 | "pattern" : "^(?\\d{4}/\\d{2}/\\d{2} (?:\\d |\\d\\d):\\d{2}:\\d{2})\\|\\s+(?.*)$" 42 | } 43 | }, 44 | "sample" : [ 45 | { 46 | "line" : "2015/06/19 16:44:04| Creating Swap Directories" 47 | } 48 | ] 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /selinux_audit.json: -------------------------------------------------------------------------------- 1 | { 2 | "selinux_audit" : { 3 | "title" : "SELinux audit log format", 4 | "description" : "Log format for SELinux audit messages", 5 | "regex" : { 6 | "main" : { 7 | "pattern" : "^type=(?\\w+) msg=audit\\((?\\d+\\.\\d+):(?\\d+)\\): (?:avc:\\s+denied\\s+\\{ (?\\w+(?:\\s\\w+)*) \\} for pid=(?\\d+) comm=\"(?\\w+)\" name=\"(?.*?)\" dev=(?\\d+:\\d+) ino=(?\\d+) scontext=(?\\w+):(?\\w+):(?\\w+):(?\\S+) tcontext=(?\\w+):(?\\w+):(?\\w+):(?\\S+) tclass=(?\\w+)|(?.*))$" 8 | } 9 | }, 10 | "timestamp-format" : [ "%s" ], 11 | "value" : { 12 | "type" : { "kind" : "string", "identifier" : true }, 13 | "event_no" : { "kind" : "integer", "identifier" : true }, 14 | "body" : { "kind" : "string" } 15 | }, 16 | "sample" : [ 17 | { 18 | "line" : "type=AVC msg=audit(1435824080.278:1215): avc: denied { search } for pid=10417 comm=\"postmaster\" name=\"\" dev=0:16 ino=1015358 scontext=unconfined_u:system_r:postgresql_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir" 19 | }, 20 | { 21 | "line" : "type=AVC msg=audit(1435822831.002:1170): avc: denied { read write } for pid=5130 comm=\"cobblerd\" name=\"grub.cfg\" dev=dm-8 ino=394514 scontext=unconfined_u:system_r:cobblerd_t:s0 tcontext=system_u:object_r:tftpdir_rw_t:s0 tclass=file" 22 | }, 23 | { 24 | "line" : "type=SYSCALL msg=audit(1435824080.278:1215): arch=c000003e syscall=80 success=no exit=-13 a0=7fff9cd87d50 a1=73 a2=2f a3=0 items=0 ppid=1 pid=10417 auid=6449 uid=6381 gid=6222 euid=6381 suid=6381 fsuid=6381 egid=6222 sgid=6222 fsgid=6222 tty=(none) ses=118 comm=\"postmaster\" exe=\"/usr/bin/postgres\" subj=unconfined_u:system_r:postgresql_t:s0 key=(null)" 25 | }, 26 | { 27 | "line" : "type=CRYPTO_KEY_USER msg=audit(1435824253.416:1242): user pid=11586 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=destroy kind=server fp=bd:99:66:29:7c:cc:c0:f1:98:fe:4f:bc:38:18:7c:f0 direction=? spid=11586 suid=0 exe=\"/usr/sbin/sshd\" hostname=? addr=10.127.10.114 terminal=? res=success'" 28 | }, 29 | { 30 | "line" : "type=CRYPTO_SESSION msg=audit(1435824253.426:1243): user pid=11583 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=start direction=from-client cipher=aes256-ctr ksize=256 spid=11586 suid=74 rport=65337 laddr=10.223.94.89 lport=22 exe=\"/usr/sbin/sshd\" hostname=? addr=10.127.10.114 terminal=? res=success'" 31 | }, 32 | { 33 | "line" : "type=LOGIN msg=audit(1435824254.962:1250): pid=11583 uid=0 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 old auid=4294967295 new auid=6449 old ses=4294967295 new ses=125" 34 | } 35 | ] 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /strace.json: -------------------------------------------------------------------------------- 1 | { 2 | "strace_log" : { 3 | "title" : "Strace log format", 4 | "description" : "Log format used by strace", 5 | "url" : "http://en.wikipedia.org/wiki/Strace", 6 | "regex" : { 7 | "new" : { 8 | "pattern" : "(?:(?\\d+)\\s+)(?\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?) (?:(?\\w+)\\((?(?:[^)]*{[^}]+})*[^)]*)\\)?|(?\\w+)\\( |<\\.\\.\\. (?\\w+) resumed> ?(?.*)?|--- (?SIG\\w+) \\((?\\w+)\\) @ \\d+ \\(\\d+\\) ---$)(?:\\s+= (?-?\\d+|0x[0-9a-f]+))?(?: (?\\w+))?(?: \\((?[^)]+)\\)?)?(?: <(?\\d+\\.\\d+)>)?$" 9 | } 10 | }, 11 | "value" : { 12 | "process_id": { "kind" : "string", "identifier" : true }, 13 | "syscall" : { "kind" : "string", "identifier" : true }, 14 | "syscall_unfinished" : { "kind" : "string", "identifier" : true }, 15 | "syscall_resumed" : { "kind" : "string", "identifier" : true }, 16 | "result" : { "kind" : "string", "identifier" : true }, 17 | "errname" : { "kind" : "string", "identifier" : true }, 18 | "errdesc" : { "kind" : "string", "identifier" : true }, 19 | "signal" : { "kind" : "string", "identifier" : true }, 20 | "signame" : { "kind" : "string", "identifier" : true }, 21 | "duration" : { "kind" : "float" }, 22 | "args" : { "kind" : "string" }, 23 | "body" : { "kind" : "string" } 24 | }, 25 | "sample" : [ 26 | { 27 | "line":"45282 03:10:01 <... futex resumed>) = 0" 28 | }, 29 | { 30 | "line" : "12231 15:42:50 --- SIGINT (Interrupt) @ 0 (0) ---" 31 | }, 32 | { 33 | "line" : "2132 10:36:20.612682 vfork( " 34 | }, 35 | { 36 | "line" : "2132 10:36:20.613059 <... vfork resumed> ) = 2133 <0.000366>" 37 | }, 38 | { 39 | "line" : "2132 10:36:21.988159 <... getsockname resumed> {sa_family=AF_NETLINK, pid=2132, groups=00000000}, [12]) = 0 <0.000019>" 40 | }, 41 | { 42 | "line" : "2132 14:48:34.987869 select(9, [4 5 6 7 8], NULL, NULL, {0, 762910}) = 0 (Timeout) <0.763747>" 43 | }, 44 | { 45 | "line" : "12231 15:42:50 poll([{fd=5, events=POLLIN|POLLERR}], 1, -1" 46 | }, 47 | { 48 | "line" : "7658 07:58:11 recvfrom(7, 0x7fff32c2295f, 1, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)" 49 | }, 50 | { 51 | "line" : "7658 07:58:11 <... nanosleep resumed> NULL) = 0" 52 | }, 53 | { 54 | "line" : "7637 07:30:01 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2acf30791000" 55 | }, 56 | { 57 | "line" : "101658 18:31:59 stat(\"/sybase/OCS-15_0/lib\", {st_dev=makedev(8, 10), st_ino=917887, st_mode=S_IFDIR|0755, st_nlink=2, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=4096, st_atime=2016/06/30-16:14:37, st_mtime=2016/01/06-10:15:45, st_ctime=2016/03/15-11:06:56}) = 0 <0.000006>" 58 | 59 | } 60 | ] 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /log4j.json: -------------------------------------------------------------------------------- 1 | { 2 | "log4j" : { 3 | "title" : "Java log format", 4 | "description" : "Log format used by log4j and output by most java programs", 5 | "url" : "", 6 | "regex" : { 7 | "twostamps" : { 8 | "pattern" : "^(?\\w+)\\s+\\|\\s+(?(?:jvm \\d+)|wrapper[p]?)\\s+\\|\\s(?\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2})\\s+\\| (?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:,\\d{3})?) \\[(?\\w+-\\d+)\\]\\s+(?\\w+)\\s+(?[\\w.]+)\\s+-\\s+(?\\S.*)" 9 | }, 10 | "onestamp" : { 11 | "pattern" : "^(?\\w+)\\s+\\|\\s+(?(?:jvm \\d+)|wrapper[p]?)\\s+\\|\\s(?\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}(?:,\\d{3})?)\\s+\\|\\s+(?\\S.*)$" 12 | }, 13 | "tasko" : { 14 | "pattern" : "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3}) \\[(?\\w+-\\d+)\\]\\s+(?\\w+)\\s+(?[\\w.]+)\\s+-\\s+(?\\S.*)$" 15 | }, 16 | "catalina" : { 17 | "pattern" : "^(?\\w{3} \\d{1,2}, \\d{4} \\d{2}:\\d{2}:\\d{2}(?:,\\d{3})? (?:AM|PM)) (?(?:\\w+\\.)+\\w+) (?\\w+)$" 18 | } 19 | }, 20 | "level-field" : "alert_level", 21 | "level" : { 22 | "info" : "STATUS", 23 | "error" : "ERROR", 24 | "warning" : "WARN", 25 | "debug" : "DEBUG", 26 | "info" : "INFO" 27 | }, 28 | "value" : { 29 | "function" : { "kind" : "string", "identifier" : true }, 30 | "alert_level" : { "kind" : "string", "identifier" : true }, 31 | "source" : { "kind" : "string", "identifier" : true }, 32 | "debug_level" : { "kind" : "string", "identifier" : true }, 33 | "class" : { "kind" : "string", "identifier" : true }, 34 | "body" : { "kind" : "string" } 35 | }, 36 | "sample" : [ 37 | { 38 | "line" : "INFO | jvm 1 | 2015/04/28 18:40:00 | 2015-04-28 18:40:00,077 [DefaultQuartzScheduler_Worker-8] INFO com.redhat.rhn.taskomatic.TaskoJob - errata-queue-default: bunch errata-queue-bunch STARTED" 39 | }, 40 | { 41 | "line" : "INFO | jvm 1 | 2015/04/28 18:34:18 | 2015-04-28 18:34:18,872 [Thread-46] DEBUG com.redhat.rhn.common.hibernate.ConnectionManager - Adding resource com/redhat/rhn/domain/action/ActionArchType.hbm.xml" 42 | }, 43 | { 44 | "line" : "2015-05-22 16:10:00,123 [DefaultQuartzScheduler_Worker-5] INFO com.redhat.rhn.taskomatic.task.ErrataCacheTask - In the queue: 24" 45 | }, 46 | { 47 | "line" : "INFO | jvm 1 | 2015/05/24 07:35:50 | JVMDUMP013I Processed dump event \"user\", detail \"\"." 48 | }, 49 | { 50 | "line" : "INFO | jvm 1 | 2015/06/18 12:02:42 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org" 51 | }, 52 | { 53 | "line" : "DEBUG | wrapperp | 2016/05/26 12:19:44 | send a packet PING : ping" 54 | }, 55 | { 56 | "line" : "Jun 14, 2016 11:16:27 AM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap" 57 | } 58 | ] 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /cfme_log.json: -------------------------------------------------------------------------------- 1 | { 2 | "cfme_log" : { 3 | "title" : "CloudForms ManageIQ Engine log format", 4 | "description" : "Generated by CloudForms' messaging system", 5 | "url" : "https://access.redhat.com/products/cloudforms", 6 | "regex" : { 7 | "main" : { 8 | "pattern" : "^\\[(?[^]]{4})\\] (?\\w), \\[(?\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{6}) #(?\\d+):(?[0-9a-f]{6,7})\\] (?\\w+) (?..) : (?:Q-task_id\\(\\[(?\\w+)\\]\\) )?MIQ\\((?[\\w:.]+)(?:#(?\\w+))?\\) (?:Message id: \\[(?\\d+)\\], )?(?.*?)$" 9 | } 10 | }, 11 | "level" : { 12 | "info" : "STATUS", 13 | "error" : "ERROR", 14 | "warning" : "WARN", 15 | "debug" : "DEBUG", 16 | "info" : "INFO" 17 | }, 18 | "value" : { 19 | "pid" : { "kind" : "string", "identifier" : true }, 20 | "client_id" : { "kind" : "string", "identifier" : true }, 21 | "q_task_id" : { "kind" : "string", "identifier" : true }, 22 | "m_task_id" : { "kind" : "string", "identifier" : true }, 23 | "m_action" : { "kind" : "string", "identifier" : true } 24 | }, 25 | "sample" : [ 26 | { 27 | "line" : "[----] I, [2016-06-27T03:18:03.328328 #2984:92598c] INFO -- : MIQ(MiqScheduleWorker::Runner#do_work) Number of scheduled items to be processed: 1." 28 | }, 29 | { 30 | "line" : "[----] I, [2016-06-27T03:18:21.340907 #31875:1269994] INFO -- : MIQ(MiqGenericWorker::Runner#get_message_via_drb) Message id: [65000000591684], MiqWorker id: [65000000001323], Zone: [default], Role: [], Server: [bfa85d88-1b04-11e6-aed8-525400a4f30f], Ident: [generic], Target id: [], Instance id: [], Task id: [], Command: [Session.check_session_timeout], Timeout: [600], Priority: [90], State: [dequeue], Deliver On: [], Data: [], Args: [], Dequeued in: [2.975224968] seconds" 31 | }, 32 | { 33 | "line" : "[----] I, [2016-06-27T03:18:05.684555 #2975:5f198c] INFO -- : Q-task_id([job_dispatcher]) MIQ(MiqQueue#deliver) Message id: [65000000591683], Delivering..." 34 | }, 35 | { 36 | "line" : "[----] I, [2016-06-27T03:18:18.404500 #2984:92598c] INFO -- : MIQ(MiqQueue.put) Message id: [65000000591685], id: [], Zone: [default], Role: [smartstate], Server: [], Ident: [generic], Target id: [], Instance id: [], Task id: [job_dispatcher], Command: [JobProxyDispatcher.dispatch], Timeout: [600], Priority: [20], State: [ready], Deliver On: [], Data: [], Args: []" 37 | }, 38 | { 39 | "line" : "[----] I, [2016-06-27T03:18:23.337063 #2916:84f990] INFO -- : MIQ(ManageIQ::Providers::Openstack::CloudManager::MetricsCollectorWorker::Runner#get_message_via_drb) Message id: [65000000591675], MiqWorker id: [65000000000953], Zone: [default], Role: [ems_metrics_collector], Server: [], Ident: [openstack], Target id: [], Instance id: [65000000000034], Task id: [], Command: [ManageIQ::Providers::Openstack::CloudManager::Vm.perf_capture], Timeout: [600], Priority: [100], State: [dequeue], Deliver On: [], Data: [], Args: [\"realtime\"], Dequeued in: [32.741864947] seconds" 40 | } 41 | ] 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /exim.json: -------------------------------------------------------------------------------- 1 | { 2 | "exim_log" : { 3 | "title" : "Exim log format", 4 | "description" : "Log format used by Exim, the internet mailer", 5 | "url" : "http://exim.org", 6 | "regex" : { 7 | "main" : { 8 | "pattern" : "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)? (?:[+-]\\d{4})) (?:SMTP connection from (?\\w[\\w_.-]+\\w) \\[(?(?:\\d[\\d.]+\\d|[0-9a-f:]+[0-9a-f]))\\] I=\\[(?(?:\\d[\\d.]+\\d|[0-9a-f:]+[0-9a-f]))\\]:(?\\d{1,5})|(?[A-Za-z0-9-]+) (?:Completed|(?<=|=>|->|>>|\\*>|\\*\\*|==))|H=(?:(?\\w[\\w_.-]+\\w|\\(\\d[\\d.:]+\\d\\))) \\[(?(?:\\d[\\d.]+\\d|[0-9a-f:]+[0-9a-f]))\\] I=\\[(?(?:\\d[\\d.]+\\d|[0-9a-f:]+[0-9a-f]))\\]:(?\\d{1,5})) ?(?.*)$" 9 | } 10 | }, 11 | "value" : { 12 | "host" : { "kind" : "string", "identifier" : true }, 13 | "inval_host": { "kind" : "string", "identifier" : true }, 14 | "host_ip" : { "kind" : "string", "identifier" : true }, 15 | "rcv_ip" : { "kind" : "string", "identifier" : true }, 16 | "msg_id" : { "kind" : "string", "identifier" : true }, 17 | "body" : { "kind" : "string" } 18 | }, 19 | "sample" : [ 20 | { 21 | "line" : "2016-03-14 00:01:04 +0000 1afFwW-0004Wp-4f <= root@w2-64.wizint.net H=out1-w2.wizmail.org [2a00:1940:107::2:2:1000] I=[2a00:1940:107::2:4:4000]:25 P=esmtps X=TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256 CV=yes DN=\"/C=GB/ST=Berkshire/L=Burnham/O=Wizards Internet Limited/CN=backup-mx-001.wizmail.org/emailAddress=postmaster@wizmail.org\" S=1900 id=E1afFwV-0001zA-46@w2-64.wizint.net for sysadmin@wizint.net" 22 | }, 23 | { 24 | "line" : "2016-03-14 00:01:04 +0000 SMTP connection from out1-w2.wizmail.org [2a00:1940:107::2:2:1000] I=[2a00:1940:107::2:4:4000]:25 closed by QUIT " 25 | }, 26 | { 27 | "line" : "2016-03-14 00:01:04 +0000 1afFwW-0004Wp-4f => /mail/tidymail.co.uk/sysadmin/Maildir/ (sysadmin@wizint.net) R=forw_n_local T=address_directory" 28 | }, 29 | { 30 | "line" : "2016-03-14 00:01:04 +0000 1afFwW-0004Wp-4f Completed" 31 | }, 32 | { 33 | "line" : "2016-03-14 00:01:41 +0000 H=server.mecmesin.com [78.157.201.234] I=[217.146.107.46]:25 X=TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256 CV=no F=<> rejected RCPT : Unrecognised user" 34 | }, 35 | { 36 | "line" : "2016-03-14 00:01:41 +0000 H=server.mecmesin.com [78.157.201.234] I=[217.146.107.46]:25 incomplete transaction (QUIT) from <>" 37 | }, 38 | { 39 | "line" : "2016-03-14 00:02:30 +0000 1afFxu-0004hA-0h <= person@cust.net H=([192.168.0.17]) [127.0.0.1] I=[217.146.107.54]:587 P=esmtpsa X=TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128 CV=no A=myplain:wendyg@auth.scootmail.com S=19410 id=56E5FF91.50106@pelicancrossing.net for thomas.rid@gmail.com" 40 | }, 41 | { 42 | "line" : "2016-03-14 00:10:08 +0000 H=(217.146.107.46) [80.91.125.24] I=[217.146.107.46]:25 rejected EHLO or HELO 217.146.107.46: No, we don't think your name really is 217.146.107.46. IP addresses should be enclosed in square brackets." 43 | } 44 | ] 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /httpd.json: -------------------------------------------------------------------------------- 1 | { 2 | "https_access_log" : { 3 | "title" : "access log format for HTTPS", 4 | "description" : "Log format used by Apache HTTPD for HTTPS connections", 5 | "url" : "http://httpd.apache.org", 6 | "regex" : { 7 | "default" : { 8 | "pattern" : "^\\[(?\\d{2}/\\w{3}/\\d{4}:\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?: [+-]\\d{4}))?\\] (?[\\w\\d:.-]+) (?[\\w/.-]+) (?[\\w-]+) \"(?\\w+) (?\\S+) (?\\S+)\" (?\\d+|-)$" 9 | } 10 | }, 11 | "value" : { 12 | "client" : { "kind" : "string", "identifier" : true }, 13 | "wrapper" : { "kind" : "string", "identifier" : true }, 14 | "crypto" : { "kind" : "string", "identifier" : true }, 15 | "method" : { "kind" : "string", "identifier" : true }, 16 | "path" : { "kind" : "string", "identifier" : true }, 17 | "transport" : { "kind" : "string", "identifier" : true }, 18 | "resp_size" : { "kind" : "integer", "identifier" : true }, 19 | "body" : { "kind" : "string" } 20 | }, 21 | "sample" : [ 22 | { 23 | "line" : "[07/Aug/2015:07:56:43 -0400] 172.25.34.7 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 \"GET /rhn/systems/Overview.do HTTP/1.1\" 73851" 24 | }, 25 | { 26 | "line" : "[02/Feb/2016:16:41:14 +0000] 10.24.137.73 TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 \"GET /XMLRPC/GET-REQ/prod-rhel-x86_64-server-6-rhscl-1/repodata/repomd.xml HTTP/1.1\" -" 27 | } 28 | ] 29 | }, 30 | "error_log" : { 31 | "title" : "error log format for HTTPD", 32 | "description" : "Log format used by Apache HTTPD for HTTPS connections", 33 | "url" : "http://httpd.apache.org", 34 | "regex" : { 35 | "default" : { 36 | "pattern" : "^\\[(?\\w{3} \\w{3} \\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)? \\d{4})\\] \\[(?\\w+)\\] (?:(?[\\w/.-]+): )?(?:\\[client (?[\\w.:-]+)\\] )?(?:\\((?\\d+)\\))?(?.*)$" 37 | } 38 | }, 39 | "timestamp-format" : [ 40 | "%a %b %d %H:%M:%S %Y" 41 | ], 42 | "value" : { 43 | "level" : { "kind" : "string", "identifier" : true }, 44 | "function" : { "kind" : "string", "identifier" : true }, 45 | "error" : { "kind" : "string", "identifier" : true }, 46 | "client" : { "kind" : "string", "identifier" : true }, 47 | "body" : { "kind" : "string" } 48 | }, 49 | "sample" : [ 50 | { 51 | "line" : "[Tue Feb 02 16:13:00 2016] [error] ajp_read_header: ajp_ilink_receive failed" 52 | }, 53 | { 54 | "line" : "[Tue Feb 02 16:13:00 2016] [error] (70007)The timeout specified has expired: proxy: read response failed from 127.0.0.1:8009 (localhost)" 55 | }, 56 | { 57 | "line" : "[Tue Feb 02 16:42:29 2016] [warn] [client 10.20.30.100] incomplete redirection target of '/rhn/Login.do' for URI '/index.html' modified to 'http://example.com/'" 58 | } 59 | ] 60 | }, 61 | "httpd_ssl_request_log" : { 62 | "title" : "request log format for HTTPD", 63 | "description" : " Log format used by Apache HTTPD for SSL requests", 64 | "url" : "http://httpd.apache.org", 65 | "regex" : { 66 | "default" : { 67 | "pattern" : "^\\[(?\\d{2}/\\w{3}/\\d{4}:\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?: [+-]\\d{4}))?\\] (?[0-9a-f][0-9a-f.:]+[0-9a-f]) (?\\w+) (?[A-Za-z0-9_-]+) \"(?\\w+) (?/\\S+) HTTP/(?\\d\\.\\d)\" (?\\d+)$" 68 | } 69 | }, 70 | "value" : { 71 | "src_addr" : { "kind" : "string", "identifier" : true }, 72 | "transpoort" : { "kind" : "string", "identifier" : true }, 73 | "hash" : { "kind" : "string", "identifier" : true }, 74 | "method" : { "kind" : "string", "identifier" : true }, 75 | "uri" : { "kind" : "string", "identifier" : true }, 76 | "version" : { "kind" : "float"}, 77 | "size" : { "kind" : "integer"} 78 | }, 79 | "sample" : [ 80 | { 81 | "line" : "[17/Jul/2016:04:06:30 -0400] 199.52.200.205 TLSv1 AES256-SHA \"POST /XMLRPC HTTP/1.1\" 163" 82 | } 83 | ] 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /katello.json: -------------------------------------------------------------------------------- 1 | { 2 | "katello_log" : { 3 | "title" : "Katello log format", 4 | "description" : "Log format used by katello and foreman as used in Satellite 6.", 5 | "url" : "http://theforeman.org/", 6 | "regex" : { 7 | "log" : { 8 | "pattern" : "^\\[\\s?(?\\w+)\\s(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\s(?\\w+)\\]\\s+(?\\S.*)$" 9 | } 10 | }, 11 | "level-field" : "alert_level", 12 | "level" : { 13 | "error" : "ERROR", 14 | "warning" : "WARN", 15 | "debug" : "DEBUG" 16 | }, 17 | "value" : { 18 | "alert_level" : { "kind" : "string" }, 19 | "module" : { "kind" : "string", "identifier" : true }, 20 | "message" : { "kind" : "string" } 21 | }, 22 | "sample" : [ 23 | { 24 | "line" : "[DEBUG 2015-05-20 12:22:19 main] /Stage[main]/Certs::Candlepin/Exec[create candlepin qpid exchange]/unless: Failed: ConnectError: [Errno 1] _ssl.c:504: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca" 25 | }, 26 | { 27 | "line" : "[DEBUG 2015-05-20 12:22:19 main] Exec[create candlepin qpid exchange](provider=posix): Executing 'qpid-config --ssl-certificate /etc/pki/katello/certs/java-client.crt --ssl-key /etc/pki/katello/private/java-client.key -b 'amqps://avl248.bcc.qld.gov.au:5671' add exchange topic event --durable'" 28 | }, 29 | { 30 | "line" : "[ERROR 2015-05-20 12:22:19 main] qpid-config --ssl-certificate /etc/pki/katello/certs/java-client.crt --ssl-key /etc/pki/katello/private/java-client.key -b 'amqps://avl248.bcc.qld.gov.au:5671' add exchange topic event --durable returned 1 instead of one of [0]" 31 | }, 32 | { 33 | "line" : "[ INFO 2015-05-20 12:22:19 main] /usr/share/ruby/vendor_ruby/puppet/util/errors.rb:104:in `fail'" 34 | }, 35 | { 36 | "line" : "[ INFO 2015-07-06 14:50:39 main] Puppet has finished, bye!" 37 | }, 38 | { 39 | "line" : "[ WARN 2015-07-06 14:50:33 main] /Stage[main]/Foreman::Service/Service[foreman]: Skipping because of failed dependencies" 40 | }, 41 | { 42 | "line" : "[DEBUG 2015-07-06 14:50:33 main] Executing '/usr/share/katello-installer/modules/service_wait/bin/service-wait foreman status'" 43 | }, 44 | { 45 | "line" : "[DEBUG 2015-07-06 14:50:39 main] Cleaning /tmp/default_values.yaml" 46 | } 47 | ] 48 | }, 49 | "katello_httpd_log" : { 50 | "title" : "Katello httpd logs", 51 | "description" : "Apache logs written by katello", 52 | "url" : "http://theforeman.org/", 53 | "regex" : { 54 | "log_2" : { 55 | "pattern" : "^\\[\\s(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d+))\\s(?\\d+)/(?[0-9a-f]{12})\\s(?[A-Za-z/_.]+):(?\\d+)\\s*\\]:\\s+(?\\S.*)$" 56 | } 57 | }, 58 | "value" : { 59 | "pid" : { "kind" : "integer", "identifier" : true }, 60 | "ptr" : { "kind" : "string", "identifier" : true }, 61 | "file" : { "kind" : "string", "identifier" : true }, 62 | "line" : { "kind" : "integer", "identifier" : true }, 63 | "message" : { "kind" : "string" } 64 | }, 65 | "sample" : [ 66 | { 67 | "line" : "[ 2015-11-12 15:50:11.9838 7015/7fd2b73b3720 agents/Watchdog/Main.cpp:450 ]: Options: { 'analytics_log_user' => 'nobody', 'default_group' => 'nobody', 'default_python' => 'python', 'default_ruby' => 'ruby', 'default_user' => 'nobody', 'log_level' => '0', 'max_instances_per_app' => '0', 'max_pool_size' => '6', 'passenger_root' => '/usr/lib/ruby/gems/1.8/gems/passenger-4.0.18/lib/phusion_passenger/locations.ini', 'pool_idle_time' => '300', 'temp_dir' => '/var/run/rubygem-passenger', 'union_station_gateway_address' => 'gateway.unionstationapp.com', 'union_station_gateway_port' => '443', 'user_switching' => 'true', 'web_server_pid' => '7014', 'web_server_type' => 'apache', 'web_server_worker_gid' => '48', 'web_server_worker_uid' => '48' }" 68 | }, 69 | { 70 | "line" : "[ 2015-11-12 15:50:12.1052 7038/7fca73550720 agents/Watchdog/Main.cpp:631 ]: All Phusion Passenger agents started!" 71 | } 72 | ] 73 | }, 74 | "katello_prod_log" : { 75 | "title" : "Katello production logs", 76 | "description" : "Production logs written by katello", 77 | "url" : "http://theforeman.org/", 78 | "regex" : { 79 | "log" : { 80 | "pattern" : "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\s\\[(?[EWID])\\]\\s+(?\\S.*)$" 81 | } 82 | }, 83 | "level" : { 84 | "error" : "E", 85 | "warning" : "W", 86 | "info" : "I", 87 | "debug" : "D" 88 | }, 89 | "value" : { 90 | "level" : { "kind" : "string" } 91 | }, 92 | "sample" : [ 93 | { 94 | "line" : "2015-12-23 15:08:44 [I] Connecting to database specified by database.yml" 95 | }, 96 | { 97 | "line" : "2015-12-23 15:08:46 [W] step ae0fca86-8aee-410e-9508-e4729fb8ceb4:2 dropping event Dynflow::Executors::Abstract::Event[execution_plan_id: ae0fca86-8aee-410e-9508-e4729fb8ceb4, step_id: 2, event: Actions::Candlepin::ListenOnCandlepinEvents::Close, result: #]" 98 | }, 99 | { 100 | "line" : "2015-12-23 15:08:49 [D] Setting::General Load (1.6ms) SELECT \"settings\".* FROM \"settings\" WHERE \"settings\".\"category\" IN ('Setting::General') AND \"settings\".\"name\" = 'fix_db_cache' ORDER BY name LIMIT 1" 101 | }, 102 | { 103 | "line" : "2015-12-23 15:08:46 [E] ... core terminated." 104 | } 105 | ] 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | 341 | --------------------------------------------------------------------------------