From 098a5d3348158b87bcc472b0ccfd696ddbf27006 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Thu, 9 Dec 2021 12:08:33 -0700 Subject: [PATCH] Include file information in input reader error messages --- src/input/ReaderBackend.cc | 1 + src/input/ReaderBackend.h | 11 +++ src/input/readers/ascii/Ascii.cc | 22 ++++- src/input/readers/ascii/Ascii.h | 18 ++-- src/threading/MsgThread.cc | 94 +++++++++++++++++-- src/threading/MsgThread.h | 16 ++++ .../out | 16 ++-- .../.stderrwithoutfirstline | 14 +-- .../.stderrwithoutfirstline | 16 ++-- .../.stderrwithoutfirstline | 12 +-- .../.stderrwithoutfirstline | 8 +- .../zeek..stderr | 2 +- .../zeek..stderr | 6 +- 13 files changed, 179 insertions(+), 57 deletions(-) diff --git a/src/input/ReaderBackend.cc b/src/input/ReaderBackend.cc index 9fb52bf597..21420edd79 100644 --- a/src/input/ReaderBackend.cc +++ b/src/input/ReaderBackend.cc @@ -2,6 +2,7 @@ #include "zeek/input/ReaderBackend.h" +#include "zeek/Desc.h" #include "zeek/input/Manager.h" #include "zeek/input/ReaderFrontend.h" diff --git a/src/input/ReaderBackend.h b/src/input/ReaderBackend.h index 319a114dcd..bd055cf003 100644 --- a/src/input/ReaderBackend.h +++ b/src/input/ReaderBackend.h @@ -7,6 +7,11 @@ #include "zeek/threading/MsgThread.h" #include "zeek/threading/SerialTypes.h" +namespace zeek::detail + { +class Location; + } + namespace zeek::input { @@ -55,6 +60,12 @@ enum ReaderMode class ReaderBackend : public threading::MsgThread { public: + // Silence a warning from clang about hidden overloaded functions and the + // Info() function that this class provides. + using threading::MsgThread::Error; + using threading::MsgThread::Info; + using threading::MsgThread::Warning; + /** * Constructor. * diff --git a/src/input/readers/ascii/Ascii.cc b/src/input/readers/ascii/Ascii.cc index 0c78dc4eb1..4954e23e27 100644 --- a/src/input/readers/ascii/Ascii.cc +++ b/src/input/readers/ascii/Ascii.cc @@ -55,9 +55,10 @@ Ascii::Ascii(ReaderFrontend* frontend) : ReaderBackend(frontend) fail_on_invalid_lines = false; } -Ascii::~Ascii() { } - -void Ascii::DoClose() { } +void Ascii::DoClose() + { + read_location.reset(); + } bool Ascii::DoInit(const ReaderInfo& info, int num_fields, const Field* const* fields) { @@ -156,6 +157,9 @@ bool Ascii::OpenFile() return ! fail_on_file_problem; } + read_location = std::make_unique(); + read_location->filename = util::copy_string(fname.c_str()); + StopWarningSuppression(); return true; } @@ -253,6 +257,12 @@ bool Ascii::GetLine(string& str) { while ( getline(file, str) ) { + if ( read_location ) + { + read_location->first_line++; + read_location->last_line++; + } + if ( ! str.size() ) continue; @@ -278,6 +288,12 @@ bool Ascii::DoUpdate() if ( ! OpenFile() ) return ! fail_on_file_problem; + if ( read_location ) + { + read_location->first_line = 0; + read_location->last_line = 0; + } + switch ( Info().mode ) { case MODE_REREAD: diff --git a/src/input/readers/ascii/Ascii.h b/src/input/readers/ascii/Ascii.h index bf54eb0319..bd9e23b85e 100644 --- a/src/input/readers/ascii/Ascii.h +++ b/src/input/readers/ascii/Ascii.h @@ -8,6 +8,7 @@ #include #include +#include "zeek/Obj.h" #include "zeek/input/ReaderBackend.h" #include "zeek/threading/formatters/Ascii.h" @@ -20,20 +21,16 @@ struct FieldMapping std::string name; TypeTag type; TypeTag subtype; // internal type for sets and vectors - int position; - int secondary_position; // for ports: pos of the second field - bool present; + int position = -1; + int secondary_position = -1; // for ports: pos of the second field + bool present = false; FieldMapping(const std::string& arg_name, const TypeTag& arg_type, int arg_position); FieldMapping(const std::string& arg_name, const TypeTag& arg_type, const TypeTag& arg_subtype, int arg_position); FieldMapping(const FieldMapping& arg); - FieldMapping() - { - position = -1; - secondary_position = -1; - } + FieldMapping() = default; FieldMapping subType(); }; @@ -45,7 +42,7 @@ class Ascii : public ReaderBackend { public: explicit Ascii(ReaderFrontend* frontend); - ~Ascii() override; + ~Ascii() override = default; // prohibit copying and moving Ascii(const Ascii&) = delete; @@ -62,6 +59,8 @@ protected: bool DoUpdate() override; bool DoHeartbeat(double network_time, double current_time) override; + zeek::detail::Location* GetLocationInfo() const override { return read_location.get(); } + private: bool ReadHeader(bool useCached); bool GetLine(std::string& str); @@ -92,6 +91,7 @@ private: std::string path_prefix; std::unique_ptr formatter; + std::unique_ptr read_location; }; } // namespace zeek::input::reader::detail diff --git a/src/threading/MsgThread.cc b/src/threading/MsgThread.cc index 1e6a4c82d2..110e58f831 100644 --- a/src/threading/MsgThread.cc +++ b/src/threading/MsgThread.cc @@ -5,6 +5,8 @@ #include #include "zeek/DebugLogger.h" +#include "zeek/Desc.h" +#include "zeek/Obj.h" #include "zeek/RunState.h" #include "zeek/iosource/Manager.h" #include "zeek/threading/Manager.h" @@ -341,38 +343,105 @@ void MsgThread::Finished() void MsgThread::Info(const char* msg) { - SendOut(new detail::ReporterMessage(detail::ReporterMessage::INFO, this, msg)); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + SendOut(new detail::ReporterMessage(detail::ReporterMessage::INFO, this, desc.Description())); } void MsgThread::Warning(const char* msg) { - SendOut(new detail::ReporterMessage(detail::ReporterMessage::WARNING, this, msg)); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + SendOut( + new detail::ReporterMessage(detail::ReporterMessage::WARNING, this, desc.Description())); } void MsgThread::Error(const char* msg) { - SendOut(new detail::ReporterMessage(detail::ReporterMessage::ERROR, this, msg)); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + SendOut(new detail::ReporterMessage(detail::ReporterMessage::ERROR, this, desc.Description())); } void MsgThread::FatalError(const char* msg) { - SendOut(new detail::ReporterMessage(detail::ReporterMessage::FATAL_ERROR, this, msg)); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + SendOut(new detail::ReporterMessage(detail::ReporterMessage::FATAL_ERROR, this, + desc.Description())); } void MsgThread::FatalErrorWithCore(const char* msg) { - SendOut(new detail::ReporterMessage(detail::ReporterMessage::FATAL_ERROR_WITH_CORE, this, msg)); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + SendOut(new detail::ReporterMessage(detail::ReporterMessage::FATAL_ERROR_WITH_CORE, this, + desc.Description())); } void MsgThread::InternalWarning(const char* msg) { - SendOut(new detail::ReporterMessage(detail::ReporterMessage::INTERNAL_WARNING, this, msg)); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + SendOut(new detail::ReporterMessage(detail::ReporterMessage::INTERNAL_WARNING, this, + desc.Description())); } void MsgThread::InternalError(const char* msg) { // This one aborts immediately. - fprintf(stderr, "internal error in thread: %s\n", msg); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + fprintf(stderr, "internal error in thread: %s\n", desc.Description()); abort(); } @@ -380,7 +449,16 @@ void MsgThread::InternalError(const char* msg) void MsgThread::Debug(DebugStream stream, const char* msg) { - SendOut(new detail::DebugMessage(stream, this, msg)); + ODesc desc; + + if ( auto* location = GetLocationInfo() ) + { + location->Describe(&desc); + desc.Add(": "); + } + + desc.Add(msg); + SendOut(new detail::DebugMessage(stream, this, desc.Description())); } #endif diff --git a/src/threading/MsgThread.h b/src/threading/MsgThread.h index 121b19a2db..a14ca7c102 100644 --- a/src/threading/MsgThread.h +++ b/src/threading/MsgThread.h @@ -8,6 +8,11 @@ #include "zeek/threading/BasicThread.h" #include "zeek/threading/Queue.h" +namespace zeek::detail + { +class Location; + } + namespace zeek::threading { @@ -275,6 +280,17 @@ protected: void OnSignalStop() override; void OnKill() override; + /** + * Method for child classes to override to provide file location + * information in log messages. This is primarily used by the input + * framework's ReaderBackend classes to give more descriptive error + * messages. + * + * @return A Location pointer containing the file location information, + * or nullptr if nothing is available. + */ + virtual zeek::detail::Location* GetLocationInfo() const { return nullptr; } + private: /** * Pops a message sent by the main thread from the main-to-chold diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.bad_patterns/out b/testing/btest/Baseline/scripts.base.frameworks.input.bad_patterns/out index 34150bfa30..5414fced32 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.bad_patterns/out +++ b/testing/btest/Baseline/scripts.base.frameworks.input.bad_patterns/out @@ -1,10 +1,10 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. ### NOTE: This file has been sorted with diff-sort. -warning: input.log/Input::READER_ASCII: Could not convert line '2 /cat/sss' of input.log to Val. Ignoring line. -warning: input.log/Input::READER_ASCII: Could not convert line '3 /foo|bar' of input.log to Val. Ignoring line. -warning: input.log/Input::READER_ASCII: Could not convert line '4 this is not a pattern' of input.log to Val. Ignoring line. -warning: input.log/Input::READER_ASCII: Could not convert line '5 /5' of input.log to Val. Ignoring line. -warning: input.log/Input::READER_ASCII: String '/5' contained no parseable pattern. -warning: input.log/Input::READER_ASCII: String '/cat/sss' contained no parseable pattern. -warning: input.log/Input::READER_ASCII: String '/foo|bar' contained no parseable pattern. -warning: input.log/Input::READER_ASCII: String 'this is not a pattern' contained no parseable pattern. +warning: input.log/Input::READER_ASCII: input.log, line 5: Could not convert line '2 /cat/sss' of input.log to Val. Ignoring line. +warning: input.log/Input::READER_ASCII: input.log, line 5: String '/cat/sss' contained no parseable pattern. +warning: input.log/Input::READER_ASCII: input.log, line 6: Could not convert line '3 /foo|bar' of input.log to Val. Ignoring line. +warning: input.log/Input::READER_ASCII: input.log, line 6: String '/foo|bar' contained no parseable pattern. +warning: input.log/Input::READER_ASCII: input.log, line 7: Could not convert line '4 this is not a pattern' of input.log to Val. Ignoring line. +warning: input.log/Input::READER_ASCII: input.log, line 7: String 'this is not a pattern' contained no parseable pattern. +warning: input.log/Input::READER_ASCII: input.log, line 8: Could not convert line '5 /5' of input.log to Val. Ignoring line. +warning: input.log/Input::READER_ASCII: input.log, line 8: String '/5' contained no parseable pattern. diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline b/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline index f438129412..915e3f00cd 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline +++ b/testing/btest/Baseline/scripts.base.frameworks.input.invalid-lines/.stderrwithoutfirstline @@ -1,11 +1,11 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. ### NOTE: This file has been sorted with diff-sort. >>> -error: ../input.log/Input::READER_ASCII: Init failed -error: ../input.log/Input::READER_ASCII: Not enough fields in line 'T -41 SSH::LOG 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30' of ../input.log. Found 15 fields, want positions 17 and -1 -error: ../input.log/Input::READER_ASCII: terminating thread +error: ../input.log/Input::READER_ASCII: ../input.log, line 5: Init failed +error: ../input.log/Input::READER_ASCII: ../input.log, line 5: Not enough fields in line 'T -41 SSH::LOG 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30' of ../input.log. Found 15 fields, want positions 17 and -1 +error: ../input.log/Input::READER_ASCII: ../input.log, line 5: terminating thread received termination signal -warning: ../input.log/Input::READER_ASCII: Bad address: 342.2.3.4 -warning: ../input.log/Input::READER_ASCII: Not enough fields in line 'T -41 SSH::LOG 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30' of ../input.log. Found 15 fields, want positions 17 and -1 -warning: ../input.log/Input::READER_ASCII: Not enough fields in line 'T -41' of ../input.log. Found 1 fields, want positions 2 and -1 -warning: ../input.log/Input::READER_ASCII: Tried to parse invalid/unknown protocol: whatever +warning: ../input.log/Input::READER_ASCII: ../input.log, line 5: Not enough fields in line 'T -41 SSH::LOG 21 123 tcp 10.0.0.0/24 1.2.3.4 3.14 1315801931.273616 100.000000 hurz 2,4,1,3 CC,AA,BB EMPTY 10,20,30' of ../input.log. Found 15 fields, want positions 17 and -1 +warning: ../input.log/Input::READER_ASCII: ../input.log, line 7: Tried to parse invalid/unknown protocol: whatever +warning: ../input.log/Input::READER_ASCII: ../input.log, line 8: Bad address: 342.2.3.4 +warning: ../input.log/Input::READER_ASCII: ../input.log, line 9: Not enough fields in line 'T -41' of ../input.log. Found 1 fields, want positions 2 and -1 diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.invalidnumbers/.stderrwithoutfirstline b/testing/btest/Baseline/scripts.base.frameworks.input.invalidnumbers/.stderrwithoutfirstline index 0bac11e721..25bfb8542b 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.invalidnumbers/.stderrwithoutfirstline +++ b/testing/btest/Baseline/scripts.base.frameworks.input.invalidnumbers/.stderrwithoutfirstline @@ -1,11 +1,11 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -warning: ..<...>/Input::READER_ASCII: Number '12129223372036854775800' out of supported range. -warning: ..<...>/Input::READER_ASCII: Could not convert line '12129223372036854775800 121218446744073709551612' of ../input.log to Val. Ignoring line. -warning: ..<...>/Input::READER_ASCII: Number '9223372036854775801TEXTHERE' contained non-numeric trailing characters. Ignored trailing characters 'TEXTHERE' -warning: ..<...>/Input::READER_ASCII: Number '1Justtext' contained non-numeric trailing characters. Ignored trailing characters 'Justtext' -warning: ..<...>/Input::READER_ASCII: String 'Justtext' contained no parseable number -warning: ..<...>/Input::READER_ASCII: Could not convert line 'Justtext 1' of ../input.log to Val. Ignoring line. -warning: ..<...>/Input::READER_ASCII: Number ' -18446744073709551612' cannot be negative -warning: ..<...>/Input::READER_ASCII: Could not convert line '9223372036854775800 -18446744073709551612' of ../input.log to Val. Ignoring line. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Number '12129223372036854775800' out of supported range. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Could not convert line '12129223372036854775800 121218446744073709551612' of ../input.log to Val. Ignoring line. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 5: Number '9223372036854775801TEXTHERE' contained non-numeric trailing characters. Ignored trailing characters 'TEXTHERE' +warning: ..<...>/Input::READER_ASCII: ../input.log, line 5: Number '1Justtext' contained non-numeric trailing characters. Ignored trailing characters 'Justtext' +warning: ..<...>/Input::READER_ASCII: ../input.log, line 6: String 'Justtext' contained no parseable number +warning: ..<...>/Input::READER_ASCII: ../input.log, line 6: Could not convert line 'Justtext 1' of ../input.log to Val. Ignoring line. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 7: Number ' -18446744073709551612' cannot be negative +warning: ..<...>/Input::READER_ASCII: ../input.log, line 7: Could not convert line '9223372036854775800 -18446744073709551612' of ../input.log to Val. Ignoring line. received termination signal >>> diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.invalidset/.stderrwithoutfirstline b/testing/btest/Baseline/scripts.base.frameworks.input.invalidset/.stderrwithoutfirstline index 72c19e7b16..9f7e3e8b66 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.invalidset/.stderrwithoutfirstline +++ b/testing/btest/Baseline/scripts.base.frameworks.input.invalidset/.stderrwithoutfirstline @@ -1,11 +1,11 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. warning: Skipping input with missing non-optional value -warning: ..<...>/Input::READER_ASCII: Invalid value for subnet: 127.0.0.1 -warning: ..<...>/Input::READER_ASCII: Error while reading set or vector -warning: ..<...>/Input::READER_ASCII: Could not convert line 'name 127.0.0.1' of ../input.log to Val. Ignoring line. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Invalid value for subnet: 127.0.0.1 +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Error while reading set or vector +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Could not convert line 'name 127.0.0.1' of ../input.log to Val. Ignoring line. warning: Skipping input with missing non-optional value -warning: ..<...>/Input::READER_ASCII: Invalid value for subnet: 127.0.0.1 -warning: ..<...>/Input::READER_ASCII: Error while reading set or vector -warning: ..<...>/Input::READER_ASCII: Could not convert line 'name 127.0.0.1' of ../input.log to Val. Ignoring line. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Invalid value for subnet: 127.0.0.1 +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Error while reading set or vector +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Could not convert line 'name 127.0.0.1' of ../input.log to Val. Ignoring line. received termination signal >>> diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.invalidtext/.stderrwithoutfirstline b/testing/btest/Baseline/scripts.base.frameworks.input.invalidtext/.stderrwithoutfirstline index 3761ebda25..6575bdad2d 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.invalidtext/.stderrwithoutfirstline +++ b/testing/btest/Baseline/scripts.base.frameworks.input.invalidtext/.stderrwithoutfirstline @@ -1,7 +1,7 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -warning: ..<...>/Input::READER_ASCII: String 'l' contained no parseable number -warning: ..<...>/Input::READER_ASCII: Could not convert line ' l' of ../input.log to Val. Ignoring line. -warning: ..<...>/Input::READER_ASCII: String 'l' contained no parseable number -warning: ..<...>/Input::READER_ASCII: Could not convert line ' l' of ../input.log to Val. Ignoring line. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: String 'l' contained no parseable number +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Could not convert line ' l' of ../input.log to Val. Ignoring line. +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: String 'l' contained no parseable number +warning: ..<...>/Input::READER_ASCII: ../input.log, line 4: Could not convert line ' l' of ../input.log to Val. Ignoring line. received termination signal >>> diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.missing-file-initially/zeek..stderr b/testing/btest/Baseline/scripts.base.frameworks.input.missing-file-initially/zeek..stderr index 4fac8b9180..b926e794fa 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.missing-file-initially/zeek..stderr +++ b/testing/btest/Baseline/scripts.base.frameworks.input.missing-file-initially/zeek..stderr @@ -4,7 +4,7 @@ error: ../does-not-exist.dat/Input::READER_ASCII: Init failed error: ../does-not-exist.dat/Input::READER_ASCII: Init: cannot open ../does-not-exist.dat error: ../does-not-exist.dat/Input::READER_ASCII: terminating thread received termination signal -warning: ../does-not-exist.dat/Input::READER_ASCII: Could not get stat for ../does-not-exist.dat +warning: ../does-not-exist.dat/Input::READER_ASCII: ../does-not-exist.dat: Could not get stat for ../does-not-exist.dat warning: ../does-not-exist.dat/Input::READER_ASCII: Init: cannot open ../does-not-exist.dat warning: ../does-not-exist.dat/Input::READER_ASCII: Init: cannot open ../does-not-exist.dat warning: ../does-not-exist.dat/Input::READER_ASCII: Init: cannot open ../does-not-exist.dat diff --git a/testing/btest/Baseline/scripts.base.frameworks.input.port-embedded/zeek..stderr b/testing/btest/Baseline/scripts.base.frameworks.input.port-embedded/zeek..stderr index b32babb871..cea75eec18 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.input.port-embedded/zeek..stderr +++ b/testing/btest/Baseline/scripts.base.frameworks.input.port-embedded/zeek..stderr @@ -1,5 +1,5 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -warning: ../input.log/Input::READER_ASCII: Port '50/trash' contained unknown protocol 'trash' -warning: ../input.log/Input::READER_ASCII: Number '-1' cannot be negative -warning: ../input.log/Input::READER_ASCII: Could not convert line '1.2.3.8 -1/tcp' of ../input.log to Val. Ignoring line. +warning: ../input.log/Input::READER_ASCII: ../input.log, line 5: Port '50/trash' contained unknown protocol 'trash' +warning: ../input.log/Input::READER_ASCII: ../input.log, line 6: Number '-1' cannot be negative +warning: ../input.log/Input::READER_ASCII: ../input.log, line 6: Could not convert line '1.2.3.8 -1/tcp' of ../input.log to Val. Ignoring line. received termination signal