log4net works with Xamarin.iOS/Monotouch? - xamarin.ios

We are using Xamarin Studio to create mobile applications in .NET to some platforms. Our experience show some compatibility problems to use original Log4Net but we're no tried yet the Log4Net Compact Framework (http://logging.apache.org/log4net/release/framework-support.html).
There's someone with this problem/solution ?
Thanks in advance!

There are a lot of limitations with the MonoTouch profile. But I managed to get some of the very basic appenders to work. Should give you enough to get started. It's a work in progress, so your milage may vary. Expect bugs!
https://github.com/drunkirishcoder/monotouch-log4net

Yes, it works properly! We done the follow steps:
include the log4net.dll into References (Figure 1).
added the using log4net; in using area code.
Figure 1 - Edit References

Related

Convert Objective C project to Xamarin

We have an app written in Objective C. It uses CoreData, RestKit, about 10 viewcontrollers.
We would like to migrate it to Xamarin (so we can target Android and Windows).
I was hoping there was a way to bind the current code to a Xamarin solution and kind of rewrite features step by step within Xamarin (eg: replacing a viewcontroller at a time, and at the end replacing RestKit+CoreData, by SQLite + ServiceStack).
I am aware of the binding to Objective C option that they provide, however, it doesn't look to be the appropriate fit for this (way too complex, probably easier to rewrite the app from scratch).
Is there a way to migrate our current project to Xamarin so we can convert? or do we start from scratch?
Thanks.
Options:
Migrate full project - no;
Automatically create binding for libraries, rewrite business-code, UI-code - yes;
Rewrite from scratch using .Net/Mono classes - yes.
If code size is relatively small, you should rewrite the whole app. Moreover, thus you could have a chance to separate business-logic from UI code and tools libraries (RestKit, CoreData). In perspective, that code will be more reliable and cross-platformish.
This tool can help. It does Obj-c to C# translation (some manual cleanup required):
Automagical
Quite probably, a re-write, from scratch. One thing to keep in mind, if your back-end is .net.. and you are using DTO's.. like with AutoMapper from Entity Framework objects.. you'll be able to re-use those DTO objects on your mobile side with Xamarin. If you are using OData, I'm not sure if this is still a problem, but Xamarin studio wasn't generating OData service clients. So you had to generate them in Visual Studio, then take the generated client code and throw them into your Mobile projects.
sqllite-net is awesome. I've never had any problems with it.
https://github.com/praeclarum/sqlite-net
I currently have a project, with DTO Objects from an Azure WCF service, that I push directly down into SQLLite objects on IOS and Android with Xamarin. I use RestSharp, rather than Service Stack. I should probably go learn the difference.
If you are looking to use SQLCipher from the Component store, to encrypt your sqllite db locally on your device (Good advice to do so), you should be aware that there is an issue in android.. going to 2.2 or 2.3 with SQLCipher. Works for ICS and above though, if I remember right.
Just be careful on your security implementation for allowing clients to connect. I want to say.. don't take too much advice.. and don't take too little either. : )

Automated Web Reference Switching in C# project with NAnt

Problem: I have a C# 4.0 project with web references in Visual Studio 2010. I have two sets of web references, but I do not want to use them simultaneously. I want to be able to automatically remove all my current ones, add all the new ones, and then do the equivalent of 'update web reference' on each of them. I'm having a difficult time even finding where to start.
After searching around, I've found NAnt, which looks like it may be able to accomplish what I'm after (with the wsdl command), but I'm in unfamiliar territory.
Question: Is NAnt the right tool for this job? Will I be wasting time if I learn to use it? Is there a simple solution that I'm just not seeing? I'm more just looking for some guidance than a hammered out solution.
If anyone's interested:
After doing more research, I think I'm going to use some combination of
MSBuild,
How to call MSBuild from C#,
and
How do I automatically update a web reference at build time?
I'll update this answer with my solution when I'm done.

Dojo Toolkit offline application

I have been integrating a standard border container (Nested Layout Widgets) from this site
http://dojotoolkit.org/reference-guide/dijit/layout/BorderContainer.html which worked quite well.
The problem is that I want to use this application offline but didn't find a way to do so. I mean why do I have to be online to use it anyway?
Can you help here? Are there any files that are not stored locally that I have to link across the project? Or is it just not possible to use it offline?
Also, what about the dojo offline project anyway? Th last status is from 2007?
Thank you very much for your help in advance!
Best
TTP
You should look at the HTML5 application cache for offline applications. dojox.offline is pretty much abandoned given the newer browser technology.

SYSGEN_SYSISAPI replacement for WinCE6

I'm currently porting a CE5 platform to CE6. It's a headless system and until
now I've made great use of the "Device Management ISAPI Extension"
(SYSGEN_SYSISAPI), mostly for launching and killing processes. So I was
alarmed that this catalog item seems to have disappeared in CE6 Platform
Builder. There doesn't seem to be any explanation on MSDN why MS removed this.
Is there an obvious alternative that I should be using?
TIA
Martin
Have you tried manually adding the SYSGEN to the platform? It wouldn't be the first time something was dropped from the catalog, but that can still be included manually.

log4net vs. Nlog

Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
Anyone have experience for both? How do they stack up against each other?
We are planning on using one of them for logging in an enterprise application.
References:
log4net
nlog
EDIT: We have no existing dependencies to either nlog or log4net.
I was recently tasked to "prototype up some loggin'" for an upcoming project. I didn't have any logging framework experience. I researched, ran through tutorials, made toy apps, etc. on Log4Net, NLog, and Enterprise Library for a few days. Came back 3-4 weeks later and put them together into a cohesive demo. Hopefully some of this is useful to you.
My recommendation for our project is this:
Use a logging facade (e.g. Common.Logging, SimpleLoggingFacade) to avoid direct dependencies.
If we end up using Enterprise Library for other facilities, then use it for Logging, too.
If we end up using something with a dependency on Log4Net, use Log4Net.
If none of the above, use NLog. Which I'd prefer.
That's based on these findings (opinions!):
All 3 frameworks are capable and can do some sophisticated things. We want a quality solution, but frankly don't need ultra high performance or 60 types of event sinks.
All 3 have very similar basic concepts.
Each has its own cool tricks, like really advanced routing, or dynamic log filenames, file truncating, etc.
All 3 are pretty well documented in their own way.
For a complete newb like me, they were all a little awkward initially. No drastic differences here for the basics. I got over it.
When revisiting things a few weeks later, NLog was clearly the easiest to resume. I needed very little brush up on it. With Log4Net, I had to revisit a few online examples to get going. With EntLib, I gave up and did the tutorials all over again from scratch - I was totally lost.
I couldn't figure out how to get EntLib to do some things like log to the database. It might be easy, but it was beyond my time limit.
Log4Net and NLog have a small in-code footprint. EntLib is spammy, but I'd use a facade over it anyway.
I accidentally mis-configured EntLib and it told me at run time. Log4Net didn't. I didn't have an accidental mis-config with NLog.
EntLib comes with a nice looking app.config editor, which you 100% need. NLog has a config file schema so you get "intellisense". Log4Net comes with nada.
So obviously I like NLog so far. Not enough to use it in spite of having another solution available, though.
A key consideration that hasn't been much discussed is support and updates.
Log4Net hasn't been updated since version 1.2.10 was published April 19, 2006.
In contrast, NLog has been actively supported since 2006 will soon release NLog 2.0 supporting many platforms that didn't exist when log4net was last updated such as:
NET Framework 2.0 SP1 and above, 3.5 & 4.0 (Client and Extended profiles)
Silverlight 2.0, 3.0, 4.0
.NET Compact Framework 2.0, 3.5
Mono 2.x profile
Having had an experience with both frameworks recently, I thought I can share my views on each frameworks.
I was asked to evaluate the logging frameworks for an existing web application, I narrowed down my choices to NLog (v2.0) and log4net (v1.2.11) after going through various online forums. Here are my findings:
Setting/starting up with NLog is dead easy. You go through the Getting started tutorial on their website and you are done. You get a fair idea, how thing might be with nlog. Config file is so intuitive that anyone can understand the config. For example: if you want to set the internal logging on, you set the flag in Nlog config file's header node, which is where you would expect it to be. In log4net, you set different flags in web.config's appSettings section.
In log4net, internal logging doesnt output timestamp which is annoying. In Nlog, you get a nice log with timestamps. I found it very useful in my evaluations.
Filters in log4net - You better check my this question - log4net filter - how to write AND filter to ignore log messages and if you find an answer/solution for this, please let me know.
I understand, there is a workaround for this question, as you can write your own custom filter. But something which is not easily available in log4net.
Performance - I logged around 3000 log messages to database using a stored procedure. I used simple for loop (int i=0; i<3000; i++... to log the same message 3000 times. For the writes: log4net AdoAppender took almost double the time than NLog.
Log4net doesnt support asynchronous appender.
It was sufficient comparison for me to choose NLog as the logging framework. :)
For anyone getting to this thread late, you may want to take a look back at the .Net Base Class Library (BCL). Many people missed the changes between .Net 1.1 and .Net 2.0 when the TraceSource class was introduced (circa 2005).
Using the TraceSource is analagous to other logging frameworks, with granular control of logging, configuration in app.config/web.config, and programmatic access - without the overhead of the enterprise application block.
.Net BCL Team Blog: Intro to Tracing - Part I (Look at Part II a,b,c as well)
There are also a number of comparisons floating around: "log4net vs TraceSource"
For us, the key difference is in overall perf...
Have a look at Logger.IsDebugEnabled in NLog versus Log4Net, from our tests, NLog has less overhead and that's what we are after (low-latency stuff).
Cheers,
Florian
First look at the rest of your stack.
If you are using NHibernate, it utilizes Log4Net directly.
Other frameworks might have other specific loggers they need.
Other than that: both work fine.
I've settled on Log4Net myself. It can be a pain to configure, and if it isn't configured correctly it is a pain to figure out what went wrong. But you can make it do almost anything you would want from a logger.
If you don't have a standing issue with Log4Net, here is an article I wrote on how to get started with it:
http://elegantcode.com/2007/12/07/getting-started-with-log4net/
Well .. I used Enterprise library for database logging tasks
and now I switched to NLog due to performance bottleneck.
some comparison info :
http://pauliusraila.blogspot.com/2010/10/solving-database-logging-bottlenecks.html
I echo the above and do prefer nLog. Entlib is needlessly bloated.
Re:Log4net One thing that ALWAYS gets me with log4net is forgetting to add the following to the global.asax to init the component:
log4net.Config.XmlConfigurator.Configure();
If you go here you can find a comprehensive matrix that includes both the NLog and Log4Net libs as well as Enterprise Lib and other products.
Somebody could argue that the matrix is done in a way to underline the features of the only commercial lib present in the matrix. I think it's true but it was useful anyway to drive my choice versus NLog.
Regards
As I noticed, log4net locks their output files the whole time application is running, so you can't delete them. Otherwise they are similar.
So I prefer NLog.
Shameless plug for an open source project I run, but given the lively discussion about which .NET logging framework is more active I thought I'd post an obligatory link to Serilog.
To use within an application, Serilog is similar to (and draws heavily on) log4net. Unlike other .NET logging options, however, Serilog is about preserving the structure of log events for offline analysis. When you write:
Log.Information("The answer is {Answer}", 42);
Most logging libraries immediately render the message into a string. Serilog can do that too, but it preserves the { Answer: 42 } property so that later on, using one of a number of NoSQL data stores, you can properly query events based on the value of Answer.
We're close to a 1.0 and support all of the modern (.NET 4.5, Windows Store and Windows Phone 8) platforms.
I second NLog too because it works with unmanaged code too.
I suppose it could be possibe to use log4net and log4cxx together, but NLog handles both managed and unmanaged code out of the box.
I also looked at Common.Logging, a facade that makes abstraction of the logging api, it supports log4net, NLog and Entreprise Library. I don't think i'll use it, but i like how they use lambdas to improve performance when logging is disabled (a feature shared with NLog and probably others).
You might also consider Microsoft Enterprise Library Logging Block. It comes with nice designer.
I think the general consensus is that nlog is a bit easier to configure and use. Both are quite capable, though.
Based on my experience, SmartInspect beats both NLog and log4net.
Its extremely easy to use, documentation is great, and you can view and filter previously logged messages with their interactive log viewer, which is a huge real world advantage.
One thing I like is the tabbed views of data, like the browser tabs in Chrome. Each tab can provide a different filtered view of the log.

Resources