@@ -56,7 +56,13 @@ impl<'boot> log::Log for Logger {
5656 fn log ( & self , record : & log:: Record ) {
5757 if let Some ( mut ptr) = self . writer {
5858 let writer = unsafe { ptr. as_mut ( ) } ;
59- let result = DecoratedLog :: write ( writer, record. level ( ) , record. args ( ) ) ;
59+ let result = DecoratedLog :: write (
60+ writer,
61+ record. level ( ) ,
62+ record. args ( ) ,
63+ record. file ( ) . unwrap_or ( "<unknown file>" ) ,
64+ record. line ( ) . unwrap_or ( 0 ) ,
65+ ) ;
6066
6167 // Some UEFI implementations, such as the one used by VirtualBox,
6268 // may intermittently drop out some text from SimpleTextOutput and
@@ -97,25 +103,35 @@ unsafe impl Send for Logger {}
97103///
98104/// Therefore, we need to inject ourselves in the middle of the fmt::Write
99105/// machinery and intercept the strings that it sends to the Writer.
100- struct DecoratedLog < ' writer , W : fmt:: Write > {
106+ struct DecoratedLog < ' writer , ' a , W : fmt:: Write > {
101107 writer : & ' writer mut W ,
102108 log_level : log:: Level ,
103109 at_line_start : bool ,
110+ file : & ' a str ,
111+ line : u32 ,
104112}
105113
106- impl < ' writer , W : fmt:: Write > DecoratedLog < ' writer , W > {
114+ impl < ' writer , ' a , W : fmt:: Write > DecoratedLog < ' writer , ' a , W > {
107115 // Call this method to print a level-annotated log
108- fn write ( writer : & ' writer mut W , log_level : log:: Level , args : & fmt:: Arguments ) -> fmt:: Result {
116+ fn write (
117+ writer : & ' writer mut W ,
118+ log_level : log:: Level ,
119+ args : & fmt:: Arguments ,
120+ file : & ' a str ,
121+ line : u32 ,
122+ ) -> fmt:: Result {
109123 let mut decorated_writer = Self {
110124 writer,
111125 log_level,
112126 at_line_start : true ,
127+ file,
128+ line,
113129 } ;
114130 writeln ! ( decorated_writer, "{}" , * args)
115131 }
116132}
117133
118- impl < ' writer , W : fmt:: Write > fmt:: Write for DecoratedLog < ' writer , W > {
134+ impl < ' writer , ' a , W : fmt:: Write > fmt:: Write for DecoratedLog < ' writer , ' a , W > {
119135 fn write_str ( & mut self , s : & str ) -> fmt:: Result {
120136 // Split the input string into lines
121137 let mut lines = s. lines ( ) ;
@@ -125,7 +141,11 @@ impl<'writer, W: fmt::Write> fmt::Write for DecoratedLog<'writer, W> {
125141 // beginning of a line of output.
126142 let first = lines. next ( ) . unwrap_or ( "" ) ;
127143 if self . at_line_start {
128- write ! ( self . writer, "{}: " , self . log_level) ?;
144+ write ! (
145+ self . writer,
146+ "[{:>5}]: {:>12}@{:03}: " ,
147+ self . log_level, self . file, self . line
148+ ) ?;
129149 self . at_line_start = false ;
130150 }
131151 write ! ( self . writer, "{}" , first) ?;
0 commit comments