I think JSNLog partly matches your requirements (I am the author of JSNLog).
JSNLog consists of a client side library jsnlog.js and a server side component. The client side library sends log items to the server side component in AJAX requests. Once on the server, the log items are stored in your server side log. The .Net 4.x version uses Common.Logging, to support Log4Net, NLog, Elmah and Serilog logs. The .Net Core version supports the Core logging framework.
Matching JSNLog features with your requirements:
Will have options configure logging like info, warn, error, debug and
verbose.
JSNLog supports Log4Net severity levels: Trace, Debug, Info, Warn,
Error, Fatal. Additionally, you can use numeric severity levels,
giving you as many severity levels as you want.
Will be able to keep logs into local storage and then after a certain
interval sync the logs to a server end point
JSNLog allows you to batch a configurable number of log items in each message to the server. It also supports setting a maximum time that any message sits in the buffer before being sent.
Additionally, JSNLog lets you store log items of low severity in client side memory, and only send them to the server when a high severity log item is sent. For example, you can log Trace events in case an exception happens, and only send them to the server when an exception does happen and logs a Fatal event.
Will be able to support Json format and have control over the log
format
JSNLog allows you to log JSON objects. If you use Serilog on the server, you can store these objects as objects rather than strings. Also, you can set an event handler on jsnlog.js that allows you to modify the outgoing log item.
Would be nice to have the logging function build as a web-worker ...
JSNLog isn't a web worker.