couchcoding / logbert Goto Github PK
View Code? Open in Web Editor NEWLogbert is an advanced log message viewer for log4net, log4j and others.
License: MIT License
Logbert is an advanced log message viewer for log4net, log4j and others.
License: MIT License
I can not find it in the document!
Please help.
Hi,
I tried to open a structured log file created by NLog (from File > Open log file menu) but the following error is displayed:
The file could not be open as a log file. Maybe the data the file contains is not yet supported by Logbert
This is how NLog is configured:
<target name="file" xsi:type="File"
fileName="${basedir}/logs/app.log"
archiveFileName="${basedir}/logs/archives/app.{#}.log"
archiveEvery="Day"
archiveNumbering="Rolling"
maxArchiveFiles="14"
archiveAboveSize="50000000"
encoding="iso-8859-2">
<layout xsi:type="JsonLayout">
<attribute name="logid" layout="${guid:format=GeneratedFromLogEvent}" />
<attribute name="date" layout="${longdate}" />
<attribute name="level" layout="${level:upperCase=true}" />
<attribute name="threadid" layout="${threadid}" />
<attribute name="activityid" layout="${activityid}" />
<attribute name="machinename" layout="${machinename}" />
<attrribute name="key" layout="${mdlc:item=Key}" />
<attribute name="method" layout="${stacktrace:format=Flat:topFrames=2:skipFrames=2}" />
<attribute name="message" layout="${message}" />
<attribute name="exception" layout="${exception:Format=tostring:maxInnerExceptionLevel=5:innerFormat=shortType,message,method}" />
</layout>
</target>
</targets>
If structured logs are not supported what needs to be done to add this feature to Logbert?
Thanks,
Simo
For Custom reciever, With Custom Columniser I was not been able to configure app to parse logs with massages that span across several lines
E.g.:
2019-01-01 23:31:42,052~ERROR~83~Class.One.Two.Three~Method~Message blah blah blah
Stack1
at Stack.Stack...
some oher stuff
2019-01-01 23:31:44,999~INFO~83~Class.One.Two.Three~Method~Message blah blah 123
It does work with following regex in the test window
\d{4}-\d{2}-\d{2} \d{2}\:\d{2}\:\d{2}\,\d+?\~\w+?\~\d+?\~.+?\~.+?\~((?:.|\n)+?)(?=(?:\d{4}-\d{2}-\d{2} \d{2}\:\d{2}\:\d{2}\,\d+?\~)|\n$)
But when I try to open actual file, it does not parse it, and it appears to be empty
in .net core (2.2 or 3.0) log4net config XmlLayoutSchemaLog4j Will not export any data.
How to configure log4net layout out to logbert Instead of using customization
Hello!
I found a strange display of exception in field "Message". It's has double exception. Is it a parsing bug ? I use Nlog with Chainsaw target.
<targets async="true">
<target xsi:type="Chainsaw"
name="chainsaw"
encoding="utf-8"
address="udp://127.0.0.1:9997"
includeSourceInfo="true"
includeCallSite="true"
includeNLogData="true"
appInfo="WebTest">
<parameter layout="${aspnet-request-url}" name="url"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="chainsaw" />
</rules>
This display at "Message details" - "Message" panel when a error came:
EXCEPTION 123
System.Web.HttpException (0x80004005): GUG
в WebApplicationNetFramework.Controllers.HomeController.About() в C:\Users\Dm\source\repos\WebApplicationNetFramework\WebApplicationNetFramework\Controllers\HomeController.cs:строка 26
в lambda_method(Closure , ControllerBase , Object[] )
в System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
в System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass7_0.<BeginInvokeActionMethodWithFilters>b__1(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_6.<BeginInvokeAction>b__4()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
в System.Web.Mvc.Controller.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
в System.Web.Mvc.Controller.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
в System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
в System.Web.Mvc.MvcHandler.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
в System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
в System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
в System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
System.Web.HttpException (0x80004005): GUG
в WebApplicationNetFramework.Controllers.HomeController.About() в C:\Users\Dm\source\repos\WebApplicationNetFramework\WebApplicationNetFramework\Controllers\HomeController.cs:строка 26
в lambda_method(Closure , ControllerBase , Object[] )
в System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
в System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass7_0.<BeginInvokeActionMethodWithFilters>b__1(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_6.<BeginInvokeAction>b__4()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
в System.Web.Mvc.Controller.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
в System.Web.Mvc.Controller.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
в System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
в System.Web.Mvc.MvcHandler.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
в System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
в System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
в System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
в System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
And this is a raw data at export :
When I read the custom columnizer as a timestamp, how many matches do I need in my RegEx for that to display?
I used the button to specify the date format and that seemed to work, but the columnizer still reads it all as 00/00/00 00:00:00.00.000
Thank you very much for this excellent project! There is just one feature I'm missing, missing it so much that I can't use the software on a daily basis: The configuration of the logger (type, port, adapter) is not stored, meaning that I have to configure it after every start of the application. Also if I use different logger configurations I can't re-establish them by loading a previous configuration.
First off, really cool viewer, great work! I'm not sure if you are still working on this or accepting issues/pull requests but figured I'd leave this here anyways.
I'm using the Custom File Receiver logger with a Columnizer that includes a Timestamp column type. The timestamps in the log files I'm viewing are in the format yyyy-MM-dd HH:mm:ss,fff
, which is not correctly parsed, resulting in all the timestamps being displayed as 00:00:00
. The other columns (non-timestamp) are fine.
In the Options->General Settings I tried setting the Timestamp Format but it seems to only affect the output format, not the parsed format.
Looking at the code, I'm guessing the issue is on this line where the value is being parsed but no format specification is specified so it just uses the current culture settings.
I'm not sure if it should be specified in the Columnizer settings or the general settings (probably the former since in theory one might have to deal with multiple different date formats).
Thanks!
Currently when openning a TCP \ UDP logger, it let me choose the network adapter and use its default IP address,
However, in case of multiple IP addresses for the same network adapters - logbert would just choose one of them and won't let me listen to the relevant IP+Port.
My request is - in addition to port, let me select the receiving IP address.
Thanks,
Oren,.
Is it possible to provide the Treeview with checkboxes to select one or more items when multiple loggers are available?
If you think that this feature might be of some interest for the app, I might fork the repo and implement it.
If I want to use 64-bit LogBert, is there a package for that? It seems a little slow.
Otherwise, maybe I could compile it for 64-bit with the correct set of directions? I had a 4MB log file and it took a while to parse it all, so I was thinking that maybe the issue is with the fact that it's running 32-bit (I'm unsure if it's single threaded or not).
I see it's written in C# and you likely used VS 20XX to compile it.
Hey there,
I realize that the likelihood, and even the possibility of this is probably pretty close to zero, but I just wanted to throw out there that it would be really nice to have this on Linux as well. I know with newer dotnet stuff being cross-platform, I suppose I can hope with fingers crossed that one day it might be something that can be done. 👍
Thanks,
-MH
That's it, that's my question. I keep clicking Delete (-) instead of edit and it sucks.
It would be good to be able to log to file, with the option for the maximum number of files, and the maximum log file size. I suppose this could be done with scripting, but I don't really know anything about Lua.
I agree with the persistence request too, with also the persistence of logging.
I noticed that after closing of the application, receivers don't recover of their state and options. May be should to add such feature?
Hi,
Sorry if this is not the correct place to ask question, but I couldn't a forum or a way to contact you.
Is it somehow possible to open log files hosted on a webserver on the intranet?
For example: http://intranet.company.com/folder/logfile.log
just pasting this in on of the File Receivers gives a message that the file does not exist.
Next to that, is it also possible to apply some transformation rules on the log file?
Due to working on OpenVMS we were in the past not able to use more than 120 chars on a single line, so our files are hard wrapped at 120 chars. Would be nice if we could transform them when opening.
The code compares the wantedIpEndPoint.Address with the receivedIpEndPoint.Address, if it doesn't match, the already received bytes are not used, no message will be created, because isRightHost will be false. Because the wantedIpEndPoint must be configured when creating for example a Nlog UDP Receiver, this means that only messages sent from the host configured by selecting the Network adapter along with a IP address when creating the Receiver, can be received.
When looking at Log2Console, Receivers must be configured, but because usually you don't know nothing about the senders Network adapters, just a given IP Address has to be configured, thus allowing to receive UDP packets from that sender IP. This is the IP of the wanted endpoint and can be compared with the received endpoint. Indeed the "Senders" IP has to be configured, the receiver IP is the IP where Logbert is running. The local endpoint can be of course bound to a certain Network adapters IP, but never be compared with the senders IP.
Hey,
got a 1,8 GB Log File and got an OutOfMemoryException.
Using Version 1.5.6.1 on Windows 10
************** Ausnahmetext **************
System.OutOfMemoryException: Eine Ausnahme vom Typ "System.OutOfMemoryException" wurde ausgelöst.
bei System.String.Concat(String str0, String str1)
bei Couchcoding.Logbert.Receiver.Log4NetFileReceiver.Log4NetFileReceiver.ReadNewLogMessagesFromFile()
bei Couchcoding.Logbert.Receiver.Log4NetFileReceiver.Log4NetFileReceiver.Initialize(ILogHandler logHandler)
bei Couchcoding.Logbert.Dialogs.Docking.FrmLogDocument.OnLoad(EventArgs e)
bei System.Windows.Forms.Form.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.SetVisibleCore(Boolean value)
bei System.Windows.Forms.Form.SetVisibleCore(Boolean value)
bei System.Windows.Forms.Control.set_Visible(Boolean value)
bei WeifenLuo.WinFormsUI.Docking.DockContentHandler.SetVisible()
bei WeifenLuo.WinFormsUI.Docking.DockPane.set_ActiveContent(IDockContent value)
bei WeifenLuo.WinFormsUI.Docking.DockContentHandler.Activate()
bei WeifenLuo.WinFormsUI.Docking.DockContentHandler.Show(DockPanel dockPanel, DockState dockState)
bei WeifenLuo.WinFormsUI.Docking.DockContentHandler.Show(DockPanel dockPanel)
bei WeifenLuo.WinFormsUI.Docking.DockContent.Show(DockPanel dockPanel)
bei Logbert.MainForm.LoadFileIntoLogger(String logFileToLoad, Boolean verbose)
bei Logbert.MainForm.MnuMainFileOpenLogFileClick(Object sender, EventArgs e)
bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
bei System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
how to add Encoding config to
`c#
LogMessage newLogMsg = new LogMessageLog4Net(
Encoding.ASCII.GetString(receiveBytes)
, ++mLogNumber);
messages.Add(new LogMessageSyslog(
line
, ++mLogNumber
, mTimestampFormat));
`
Trying to open a simple NLog file, displays an error:
File I am trying to open:
NLogFile.log
I've compiled project from recent sources...
Hi,
Any plans to implement the ability to save filters or save the whole session with filters?
Thank you,
-HS
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.