Jo Shields 3c1f479b9d Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
2015-04-07 09:35:12 +01:00

81 lines
1.4 KiB
C#

#if MONODROID
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
namespace System.IO {
class LogcatTextWriter : TextWriter {
const string LibLog = "/system/lib/liblog.so";
const string LibLog64 = "/system/lib64/liblog.so";
TextWriter stdout;
readonly string appname;
StringBuilder line = new StringBuilder ();
public LogcatTextWriter (string appname, TextWriter stdout)
{
this.appname = appname;
this.stdout = stdout;
}
public override Encoding Encoding {
get {return Encoding.UTF8;}
}
public override void Write (string s)
{
if (s != null)
foreach (char c in s)
Write (c);
}
public override void Write (char value)
{
if (value == '\n')
WriteLine ();
else
line.Append (value);
}
public override void WriteLine ()
{
var o = line.ToString ();
line.Clear ();
Log (LogLevel.Info, appname, o);
stdout.WriteLine (o);
}
enum LogLevel {
Unknown,
Default,
Verbose,
Debug,
Info,
Warn,
Error,
Fatal,
Silent
}
public static bool IsRunningOnAndroid ()
{
return File.Exists (LibLog) || File.Exists (LibLog64);
}
[DllImport ("liblog")]
static extern void __android_log_print (LogLevel level, string appname, string format, string args, IntPtr zero);
static void Log (LogLevel level, string appname, string log)
{
__android_log_print (level, appname, "%s", log, IntPtr.Zero);
}
}
}
#endif // MONODROID