-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDBLogger.m
111 lines (84 loc) · 2.84 KB
/
DBLogger.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
Project: DataBasin
Copyright (C) 2012 Free Software Foundation
Author: Riccardo Mottola
Created: 2012-04-24 10:50:19 +0000 by multix
This application is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This application is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 31 Milk Street #960789 Boston, MA 02196 USA.
*/
#import "DBLogger.h"
@implementation DBLogger
- (id)init
{
if ((self = [super init]))
{
[NSBundle loadNibNamed:@"Log" owner:self];
logLevel = LogStandard;
}
return self;
}
-(void)dealloc
{
[super dealloc];
}
-(void)setLogLevel: (DBLogLevel)l
{
logLevel = l;
}
- (IBAction)show:(id)sender
{
[logWin makeKeyAndOrderFront:self];
}
-(IBAction)clean:(id)sender
{
[logView setString:@""];
}
-(void)log: (DBLogLevel)level :(NSString* )format, ...
{
va_list ap;
NSString *formattedString;
if (logLevel >= level)
{
NSAttributedString *attrStr;
NSMutableDictionary *textAttributes;
va_start (ap, format);
formattedString = [[NSString alloc] initWithFormat:format arguments: ap];
va_end(ap);
textAttributes = [NSMutableDictionary dictionaryWithObject:[NSFont userFixedPitchFontOfSize: 0] forKey:NSFontAttributeName];
if (level == LogStandard)
[textAttributes setObject:[NSColor blackColor] forKey:NSForegroundColorAttributeName];
else if (level == LogInformative)
[textAttributes setObject:[NSColor blueColor] forKey:NSForegroundColorAttributeName];
else if (level == LogDebug)
[textAttributes setObject:[NSColor purpleColor] forKey:NSForegroundColorAttributeName];
else
{
NSLog(@"Unexpected log level");
NSLog(@"level: %d | %@", level, formattedString);
}
attrStr = [[NSAttributedString alloc] initWithString: formattedString
attributes: textAttributes];
[self performSelectorOnMainThread:@selector(_appendStringToViewAndScroll:) withObject:attrStr waitUntilDone:YES];
[attrStr release];
[formattedString release];
}
}
- (void)_appendStringToViewAndScroll:(NSAttributedString *)str
{
[str retain];
[[logView textStorage] appendAttributedString: str];
/* we scroll in the next run of the event loop */
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
[logView scrollRangeToVisible:NSMakeRange([[logView string] length], 0)];
[str release];
}
@end